class Dog(object):
tooth = 10
wangcai = Dog()
xiaohei = Dog()
print(Dog.tooth) # 10
print(wangcai.tooth) # 10
print(xiaohei.tooth) # 10
类属性的优点
- 记录的某项数据 始终保持一致时,则定义类属性。
- 实例属性 要求 每个对象 为其 单独开辟一份内存空间 来记录数据,而 类属性 为全类所共有 ,仅占用一份内存,更加节省内存空间。
类属性只能通过类对象修改,不能通过实例对象修改,如果通过实例对象修改类属性,表示的是创建了一个实例属性。
class Dog(object):
tooth = 10
wangcai = Dog()
xiaohei = Dog()
# 修改类属性
Dog.tooth = 12
print(Dog.tooth) # 12
print(wangcai.tooth) # 12
print(xiaohei.tooth) # 12
# 不能通过对象修改属性,如果这样操作,实则是创建了一个实例属性
wangcai.tooth = 20
print(Dog.tooth) # 12
print(wangcai.tooth) # 20
print(xiaohei.tooth) # 12
class Dog(object):
def __init__(self):
self.age = 5
def info_print(self):
print(self.age)
wangcai1 = Dog(18)
xiaohei1 = Dog(99)
# 实例属性
print(wangcai1.age)
# print(Dog.age) # 报错:实例属性不能通过类访问
wangcai1.info_print() # 5
# 2.1 类中定义的函数是类的函数属性,类可以使用,但必须遵循函数的参数规则,有几个参数需要传几个参数
Dog.info_print(wangcai1)
Dog.info_print(xiaohei1)
# 2.2 类中定义的函数主要是给对象使用的,而且是绑定给对象的,虽然所有对象指向的都是相同的功能,但是绑定到不同的对象就是不同的绑定方法,内存地址各不相同
print(id(Dog.info_print)) # 2118372007224
print(id(wangcai1.info_print)) # 2118368383176
print(id(xiaohei1.info_print)) # 2118368383176
# 2.3绑定到对象的方法特殊之处在于,绑定给谁就因该有谁来调用,谁来调用,就会将”谁“本身当作第一个参数自动传入(方法__init__也是一样)
wangcai1.info_print() # Dog.info_print(wangcai1)
xiaohei1.info_print() # Dog.info_print(xiaohei1)
# 类型list就是一个类
print(type(list)) # <class ‘type‘>
# 实例化得到3个对象l1,l2,l3
l1=list([1,2,3])
l2=list([‘a‘,‘b‘,‘c‘])
l3=list([‘x‘,‘y‘])
# 三个对象都有绑定方法append,是相同的功能,但内存地址不同
# 操作绑定方法l1.append(4),就是再往l1添加4,绝对不会将4添加到l2或l3
print(l1.append(4)) # 等同于list.append(l1,4)
print(l1) # [1, 2, 3, 4]
print(l2) # [‘a‘, ‘b‘, ‘c‘]
print(l3) # [‘x‘, ‘y‘]
原文:https://www.cnblogs.com/LYPZX/p/14329417.html