再说Python面向对象的三大特性(2)

class Demo:
    @property
    def p(self):
        print('property func')
    @p.setter
    def p(self,num):
        print('property_setter')
    @p.deleter
    def p(self):
        print('在删除')
d=Demo()
d.p 
d.p=10
del d.p
--------------------------------------------------------------------------------------
property func
property_setter
在删除

staticmethod静态方法装饰器:将类内的方法变成普通的函数,或者把类外的函数放到类内当作方法调用

class A:
    @staticmethod
    def sum():  #这个方法跟普通函数没有区别
        print('staticmethod')
A.sum() #用类名调用
--------------------------------------------------------------------------------------
staticmethod

classmethod类方法装饰器:该方法用于操作类属性,无法操作对象属性

class A:
    role='male'
    @classmethod
    def sum(cls):  #用于操作类属性
        print(cls.role)
A.sum() #用类名调用
--------------------------------------------------------------------------------------
male

十、isinstance和type的区别以及issubclass

isinstance和type都可以用于判断对象和指定类间的关系,但是isinstance的判断没有type准确,它无法正确判断子类的对象和其父类的关系

class A:
    pass
class B(A):
    pass

b=B()
print(isinstance(b,B))
print(isinstance(b,A))
print(type(b) is B)
print(type(b) is A)
--------------------------------------------------------------------------------------
True
True
True
False

issubclass用于判断给定的两个类,前者是否是后者的子类

十一、反射

hasattr(对象或类名,‘属性或方法名’)  判断指定的对象或类中是否存在指定的属性或方法,有返回True

getattr(对象或类名,'属性或方法名')  获取对象或类的指定属性值或方法的内存地址

setattr(对象或类名,‘新属性名’,新属性值) 给对象或类添加新的属性或方法

delattr(对象或类名,‘新属性名’) 删除之前添加的属性

十二、类的内置方法

__doc__ :输出类的描述信息

__module__ :表示当前操作的对象在那个模块

__class__ :  表示当前操作的对象的类是什么

__dict__ :查看类或对象中的所有成员  类调用打印类的所有属性,不包括实例属性。实例调用打印所有实例属性

__str__ 格式化输出%s输出该方法的值

__repr__  格式化输出%r输出该方法的值,并且%s在没有__str__方法时也是输出该方法的值
  __del__  del 执行该方法
  __getitem__  用对象加[]方式取值

class A:
    def __init__(self):
        self.names=['egon','alex','eva'] #可以是其他序列
    def __getitem__(self, item):
        print(self.names[item])

a=A()
a[1]
----------------------------------------------------------
alex

__setitem__  添加值
  __delitem__  删除值
  __new__ 用于创建没有属性的对象,调用object的__new__即可不需要自己实现。可以利用该方法实现单例模式
  __call__ 对象加括号执行该方法
  __len__  len()执行该方法
  __eq__  ==运算输出该方法的值

__hash__ hash执行该方法

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/dfd70f7d106b9f165d4997aaedab6c2f.html