类属性 实例属性
# 类属性
class people:
name="Tom" #公有的类属性
__age=18 #私有的类属性
p=people()print(p.name) #实例对象
print(people.name) #类对象
# print(p.__age) #错误 不能在类外通过实例对象访问私有的类属性
print(people.__age) #错误 不能在类外同过类对象访问私有的类属性
实例属性
class people:
name="tom"def __init__(self.age):
self.age=age
p=people(18)
print(p.name)
print(p.age) #实例属性是实例对象特有的,类对象不能拥有
print(people.name)#print(people.age) #错误:实例属性,不能通过类对象调用
class Test:
num=100 #类属性
def __init__(self):
self.age=18 #实例属性
test1=Test()
test2=Test()
# test1.age=19
# test2.age=20
print(test1.num) #100
test1.num=200 #如果通过对象去修改类属性,那么Python会自动给这个对象和这个类属性相同名字的实例属性
print(test1.num) #200,只是修改了副本
print(Test.num) #100
del test1.num #删除之后,仍能打印print(test1.num)
实例方法 / 静态方法 / 类方法
-
class Methods:
-
def imeth(self, x): print(self, x) # 实例方法:传入的是实例和数据,操作的是实例的属性
-
def smeth(x): print(x) # 静态方法:只传入数据 不传入实例,操作的是类的属性而不是实例的属性
-
def cmeth(cls, x): print(cls, x) # 类方法:传入的是类对象和数据
-
smeth = staticmethod(smeth) # 调用内置函数,也可以使用@staticmethod
-
cmeth = classmethod(cmeth) # 调用内置函数,也可以使用@classmethod
-
obj = Methods()
-
obj.imeth(1) # 实例方法调用 <__main__.Methods object...> 1
-
Methods.imeth(obj, 2) # <__main__.Methods object...> 2
-
Methods.smeth(3) # 静态方法调用 3
-
obj.smeth(4) # 这里可以使用实例进行调用
-
Methods.cmeth(5) # 类方法调用 <class '__main__.Methods'> 5
-
obj.cmeth(6) # <class '__main__.Methods'> 6