#__slot__
import traceback
from types import MethodType
class Myclass(object):
__slots__ = ['name', 'set_name']
def set_name(self, name):
self.name = name
cls = Myclass()
cls.name = 'Tom'
cls.set_name = MethodType(set_name, cls)
cls.set_name = ('Jerry')
print(cls.name)
try:
cls.age = 30
except AttributeError:
traceback.print_exc()
class ExtMyclass(Myclass):
pass
ext_class = ExtMyclass()
ext_cls.age = 30
print(ext_cls.age)
import traceback
#propety
class Student:
@propety
def score(self):
return self._score
@score.setter
def score(self, value):
if not isinstance(value, int):
raise ValueError('not int')
elif(value < 0) or (value > 100):
raise ValueError('not between 0~100')
self._score = value
s = Student()
s.score = 75
print(s.score)
try:
s.score = 'abc'
except ValueError:
traceback.print_exc()
try:
s.score = 101
except:
traceback.print_exc()
# 实现了__set__/__get__/__del__方法的类称为描述器
class MyProperty:
def __init__(self, fget = None, fset = None, fdel = None):
self.fget = fget
self.fset = fset
self.fdel = fdel
def __get__(self, instance, cls):
if self.fget:
self.fget(instance)
def __set__(self, instance, value):
if self.fset:
self.fset(instance, value)
def __del__(self,instance):
if self.fdel:
self.fdel(instance)
def getter(self, fn):
self.fget = fn
def setter(self, fn):
print('setter')
self.fset = fn
def deler(self, fn):
self.fdel = fn
class Student:
@MyProperty
def score(self):
return self._score
@score.setter
def set_score(self, value):
self._score = value
s = Student()
s.score = 95
print(s.score)
近期评论