学习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      #正常调用

属性方法可以修改和删除。这就不写了

唉,这几天学的东西少得可怜,每天学习时间不到一个小时……

 

posted @ 2021-04-05 21:30  筱宇衡  阅读(49)  评论(0编辑  收藏  举报