"""
python的类属性,就是python中将一个类,作为类对象,类属性可以通过类对象访问
author:一叶扁舟
"""
class Dog:
# 共有的类属性
name = "狗"
# 私有的类属性
__age = 12
def __init__(self,color,sex):
self.color = color
self.sex = sex
# 实例方法,函数的第一个参数写self
def eat(self):
print("%s正在吃。。。。",self.name)
# 类方法,函数里面的第一个参数写cls
@classmethod
def run(cls):
print("%s 今年%d岁了"%(cls.name,cls.__age))
# 静态方法,函数可以不写参数
@staticmethod
def sleep():
print("狗正在睡觉。。。。。")
dog = Dog("白色","公的")
# 正确
print(dog.name)
# 正确
print(Dog.name)
# 错误
# print(dog.__age)
#错误
# print(Dog.__age)
# 实例对象取出实例属性和类属性
print(dog.name)
print(dog.color)
print(dog.sex)
# 类对象无法实例属性
# print(Dog.color)
# print(Dog.sex)
"""
总结
如果需要在类外修改类属性,必须通过类对象去引用然后进行修改。如果通过实例对象去引用,会产生一个同名的实例属性,
这种方式修改的是实例属性,不会影响到类属性,并且之后如果通过实例对象去引用该名称的属性,实例属性会强制屏蔽掉类属性,
即引用的是实例属性,除非删除了该实例属性。
"""
print("-"*120)
# 类方法可以用实例对象访问也可以用类对象访问
print(dog.run())
print(Dog.run())
"""
总结
从类方法和实例方法以及静态方法的定义形式就可以看出来,类方法的第一个参数是类对象cls,那么通过cls引用的必定是类对象的属性和方法;
而实例方法的第一个参数是实例对象self,那么通过self引用的可能是类属性、也有可能是实例属性(这个需要具体分析),
不过在存在相同名称的类属性和实例属性的情况下,实例属性优先级更高。静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类对象来引用
"""
python学习笔记--类属性、类方法,静态方法
最新推荐文章于 2024-06-20 18:52:09 发布