一、实例方法
1.调用方式1
class Person:
def eat(self, food):
print("吃:", food)
p = Person()
p.eat("土豆") # 输出:吃: 土豆
2.也可以用类调用
Person.eat("abc", "土豆") # 输出为:吃:土豆
# 需要注意的是:此处必须传入2个参数,第一个为self, 第二个为food.self变成了"abc"
3.eat函数存放在Person类中的__dict __ 中
也可以用如下方式调用:
func = Person.eat
func( "abc", "土豆") # 输出为:吃:土豆
# func 就是Person.eat函数, 必须传入2个参数。
第2、3种调用方式无多大意义,了解即可。以第1种为标准调用方式。
二、类方法
1.调用方式1
class Person:
@classmethod
def classm(cls):
print("这是一个类方法")
Person.classm(123) # 输出为:这是一个类方法 123
2.调用方式2
func = Person.classm
func(666) # 输出为:这是一个类方法 666
# func就是 Person.classm函数
三、静态方法
1.调用方式1
class Person:
@staticmethod
def staticm(a): # 不像前两种方法必有第一个默认参数
print("这是一个类方法", a)
Person.staticm(123) # 输出为:这是一个类方法 123
2.调用方式2
func = Person.staticm
func(123) # 输出为:这是一个类方法 123
四、不同类型的方法访问不同类型的属性规律
实例能访问实例属性和类属性。访问时,实例属性优先于类属性。
类只能访问类属性,而不能向下访问该类产生的实例的实例属性。(实例数量n ≥ 该类1),所以:
实例方法能访问实例属性和类属性。访问时,实例属性优先于类属性。类方法只能访问类属性,而不能访问该类产生的实例的实例属性。
class Person:
age = 10
def instancem(self):
print(self.age)
print(self.num)
p = Person()
p.num = 66
p.instancem() # 输出为:10 66