首页 > temp > python入门教程 >
-
学习python第十天 面向对象进阶 类方法 静态方法 属性方法property
类方法:类方法通过@classmethod装饰器实现,类方法和普通方法的区别是类方法只能访问类变量,不能访问实例变量
强调一下,之前我一直没注意,类方法中想要调用类的属性,需要用self.属性
class Person:
name = "jack"
def eat(self):
print(self.name) #不加self 无法打印。因为类的属性调用就是 实例.属性,self本身代表实例,所以需要self.name
类方法:
class Person:
name = "jack"
def __init__(self,sex):
self.sex = "male"
@classmethod
def eat(self):
print(self) #不加装饰器的情况下打印self应该是实例本身,但是加了装饰器打印出来的就是类本身。所以类方法接收到的self不是实例无法访问实例属性
print(self.sex) #无法打印,因为加了装饰器,eat属于类方法,不能访问实例变量
print(self.name) #可以打印,因为能够访问类变量
静态方法:通过@staticmethod装饰器实现。 静态方法即不能访问类变量也不能访问实例变量,方法也一样
静态方法隔断了他跟类或实例的任何关系。即定义方法时候的self参数传递不过去。要想传递必须在调用的时候传入实例才行。
class Person:
name = "jack"
def __init__(self,age,sex):
self.age = age
self.sex = sex
@staticmethod
def run(self): #此处self可以省略,因为没用
print(name,self.age)
p = Person(12,"male")
p.run() #此处无法调用静态方法,因为隔断了其跟类或者实例的关系
p.run(p) #像调用静态方法需要将实例传输进去才行
属性方法property:访问类中的东西都是可以的。通过装饰器@property把一个方法变成一个静态属性(变量)。
class Person:
name = "jack"
@property
def fly(self):
print("i am flying~")
p = Person()
p.fly() #加了()当作函数调用,但是却无法调用。因为变成了属性
p.fly #正常调用
属性方法可以修改和删除。这就不写了
唉,这几天学的东西少得可怜,每天学习时间不到一个小时……
来源:https://www.cnblogs.com/xiaoyuheng/p/14619588.html