Python 面向对象
Demo
class NameClass:
__slots__ = ('arg1', 'arg2')
def __init__(self,arg1,arg2):
self.arg1 = arg1
self.arg2 = arg2
def __repr__(self):
return f'{self.arg1} {self.arg2}'
@staticmethod
def for_class_not_object(arg3,arg4):
return arg3+arg4
@classmethod
def class_method_ex(cls):
return cls.for_class_not_object(1,2)
@property
def _arg1(self):
return self.arg1
@_arg1.setter
def _arg1(self,x):
self.arg1 = x
限制类属性
为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__
变量,来限制该class能添加的属性。使用tuple定义允许绑定的属性名称。
class NameClass:
__slots__ = ('arg1', 'arg2')
def __init__(self,arg1,arg2):
self.arg1 = arg1
self.arg2 = arg2
初始化方法
在创建对象的时候,通过自动执行__init__
方法,完成对内存的初始化操作,也就是把数据放到内存空间中。
打印对象
打印对象的时候不希望看到对象的地址而是看到我们自定义的信息,可以通过在类中放置__repr__
魔术方法来做到,该方法返回的字符串就是用print函数打印对象的时候会显示的内容。
静态方法
@staticmethod
创建方法是属于类而并不属于对象,就可以在实例化前调用。
class NameClass:
__slots__ = ('arg1', 'arg2')
def __init__(self,arg1,arg2):
self.arg1 = arg1
self.arg2 = arg2
def __repr__(self):
return f'{self.arg1} {self.arg2}'
@staticmethod
def for_class_not_object(arg3,arg4):
return arg3+arg4
@classmethod
def class_method_ex(cls):
return cls.for_class_not_object(1,2)
类方法
@classmethod
和静态方法比较类似,Python还可以在类中定义类方法,类方法的第一个参数约定名为cls,它代表的是当前类相关的信息的对象,通过这个参数可以获取和类相关的信息并且可以创建出类的对象。
@property装饰器
如果想访问类的属性可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作。
分别使用@property
@_arg1.setter
定义方法_arg1
class NameClass:
__slots__ = ('arg1', 'arg2')
def __init__(self,arg1,arg2):
self.arg1 = arg1
self.arg2 = arg2
@property
def _arg1(self):
return self.arg1
@_arg1.setter
def _arg1(self,x):
self.arg1 = x
a = NameClass(1,2)
a.arg1 = 3
print(a.arg1)
# 3