面向对象基础-实例方法,类方法和静态方法
# 功能和权限
# 1.实例方法(一般指实例的对象方法):第一个参数self默认接受实例对象本身
# 2.类方法:第一个参数self默认接受一个类
# 3.静态方法:没有默认接受参数
class Dog:
def run(self): # 1.实例方法
print('实例方法', self) # 实例方法 <__main__.Dog object at 0x0000000002333B20>
@classmethod # 2.类方法
def shout(cls):
print('类方法', cls) # 类方法 <class '__main__.Dog'>
@staticmethod # 3.静态方法
def eat():
print('静态方法')
d = Dog()
d.run() # 需要传入一个实例对象,这里把d直接传了进去
print(d) # <__main__.Dog object at 0x0000000002303B20>
Dog.run(d) # 这里不能直接使用类来调用类中的实例方法,需要传递一个实例对象d才可以使用
d.shout() # 通过向上溯源实例所属类找到Dog类之后传入参数,最正确的是按照下面的方法使用
Dog.shout() # 类方法 <class '__main__.Dog'>
d.eat()
# 类方法和对象方法的存储问题
# 和属性一样,方法也是存储在__dict__这个字典内
print(Dog.__dict__)
print(d.__dict__)
# 注意字典里面存入的方法,其实是一个对象,字典中是可以存入对象的
# 注意不同方法的语法,调用方法和传参规则