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
posted @ 2020-06-28 22:24  林震宇  阅读(127)  评论(0编辑  收藏  举报