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 @   foreast  阅读(341)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2018-12-26 threadLocal
点击右上角即可分享
微信分享提示