python类属性、类方法、静态方法

一. 类属性

1. 类属性

类属性就是 类 所拥有的属性,它被 该类的所有实例对象 所共有。
类属性可以使用 类或 实例对象访问。

说明:

1. 记录的某项数据 始终保持一致时,则定义类属性。
2. 实例属性要求 每个对象为其 单独开辟一份内存空间 来记录数据,而 类属性 为全类所共有 ,仅占用一份内存,更加节省内存空间。

2. 类属性的设置

class Dog(object):
    tooth = 10

dog = Dog()
print(Dog.tooth)    #类直接调用
print(dog.tooth)    #实例调用

说明:

类属性类似于java的静态变量

3. 类属性的修改

类属性的修改只能通过类修改,不能通过类的实例对象修改

class Dog(object):
    tooth = 10

dog = Dog()

Dog.tooth = 20
print(Dog.tooth)    # 20
print(dog.tooth)    # 20

dog.tooth = 30
print(Dog.tooth)    # 20
print(dog.tooth)    # 30

说明:

上面 dog.tooth = 30 并没有修改类属性tooth,而是创建了一个与类属性tooth同名的实例属性

二. 类方法

用装饰器`@classmethod`来标识的方法为类方法,对于类方法,第一个参数必须是类,一般以`cls`作为第一个参数。

class Dog(object):
    tooth = 10

    @classmethod
    def class_fn(cls):
        return cls.tooth


dog = Dog()

print(Dog.class_fn())   # 10   # 类直接调用类方法
print(dog.class_fn())   # 10   # 类的对象调用类方法

说明:

  • 参数cls代表当前类,调用方法时自动传入
  • 注意:类方法也是可以继承的,即类方法不只是定义它的类可以调用,子类通过子类名也可以调用,此时的cls参数为调用它的子类

三. 静态方法

通过装饰器`@staticmethod`来进行修饰,静态方法既不需要传递类也不需要传递实例对象作为参数(形参没有self/cls)**。
静态方法 也能够通过 实例对象 和 类去访问。

class Dog(object):
    tooth = 10

    @staticmethod
    def static_fn():
        return "静态方法"


dog = Dog()

print(Dog.static_fn())   # 静态方法   # 类直接调用静态方法
print(dog.static_fn())   # 静态方法   # 类的对象调用静态方法

说明:

静态对象中无法访问类属性

 

posted @ 2020-12-26 22:35  foreast  阅读(313)  评论(0编辑  收藏  举报