21.类的高级特性

在类中定义方法

def __str__(self):
       return "你好"
#当执行print(实例名)时,会自动调用__str__方法 结果是输出 你好

@property (可读,直接读取return返回的值)与@函数名.setter(可写,当调用实例名.age=xxx时,调用的是@函数名.setter标识的函数)

class cat(object):
    def __init__(self):
        self.__age = 14

    @property
    def age(self):
        return "nihao"
#前面必须有@property声明的函数,否则会报错
    @age.setter
    def age(self,age):
        self.__age=age


if __name__ == "__main__":
    c = cat()
    c.age=4
    print(c.age)

slots=(tuple)方法
ps:如果当前类包含有slots方法,那么该类不能添加新的属性,只能使用在slots元组中的属性,slots元组中的属性值可以变化,当该类被继承时,该类的slots方法不会影响他的子类,也就是说,子类仍然可以添加新的属性,除非子类中也有slots方法,子类也会继承父类中的slots方法中的属性

image.png

类的实例方法,比如直接def 方法名 只能用实例调用

被@staticmethod修饰
类的静态方法,可以通过类名或者实例名来调用

被@classmethod修饰
类的类方法,可以通过类名或者实例名来调用

class Cat(object):
    log="sss"
    @classmethod
    def info(cls):
        return "你好,我是类方法"+cls.log


if __name__ == "__main__":

    c=Cat()
    print(c.info())
    print(Cat.info())

ps:万物皆对象
hasattr(object, name)
  判断object对象中是否存在name属性,有则返回True,否则返回False;需要注意的是name参数是string类型,所以不管是要判断变量还是方法,其名称都以字符串形式传参

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。