Python 面向对象 方法相关

方法的概念

描述一个目标的行为动作
和函数非常类似,最主要的区别为调用方式

class Person:
    def eat2(self):
        print(1)
        print(2)
        print(3)

p = Person()
p.eat2()

方法的划分

划分依据:
方法的第一个参数必须要接收的数据类型
不管是哪一种类型的方法,都必须存储在类当中,没有在实例当中
不同类型方法的调用方式不同,不管是自己传递,还是解释器帮我们处理,最终要保证不同类型的方法的第一个参数接收到的数据,是他们想要的类型

实例方法:默认的第一个参数需要接收到一个实例
类方法:默认的第一个参数需要接收到一个类
静态方法:第一个参数啥也不默认接收

class Person:
    def eat2(self):
        print('这是一个实例方法', self)
    
    @classmethod
    def leifangfa(cls):
        print('这是一个类方法', cls)
    
    @staticmethod
    def jingtaifangfa():
        print('这是一个静态方法')

p = Person()
print(p)
p.eat2()

Person.leifangfa()
Person.jingtaifangfa()

<main.Person object at 0x03AF60B0>
这是一个实例方法 <main.Person object at 0x03AF60B0>
这是一个类方法 <class ‘main.Person’>
这是一个静态方法

class Person:
    def eat2(self):
        print('这是一个实例方法', self)
    
    @classmethod
    def leifangfa(cls):
        print('这是一个类方法', cls)
    
    @staticmethod
    def jingtaifangfa():
        print('这是一个静态方法')

p = Person()

print(p.__dict__)
print(Person.__dict__)

{}
{‘module’: ‘main’, ‘eat2’: <function Person.eat2 at 0x04680660>, ‘leifangfa’: <classmethod object at 0x046A71F0>, ‘jingtaifangfa’: <staticmethod object at 0x046A7170>, ‘dict’: <attribute ‘dict’ of ‘Person’ objects>, ‘weakref’: <attribute ‘weakref’ of ‘Person’ objects>, ‘doc’: None}

实例方法

class Person:
    def run(self):
        pass

标准调用:
使用实例调用实例方法,不用手动传,解释器会自动把调用对象本身传递过来。
如果实例方法没有接收任何参数则会报错

class Person:
    def eat(self, food):
        print('在吃饭 ', food, self)

p = Person()
print(p)
p.eat('tudou')

使用类调用:
间接调用:
本质就是直接找到函数本身来调用

class Person:
    def eat(self, food):
        print('在吃饭 ', food, self)

Person.eat(123, 'abc')

func = Person.eat

func(999, 'abc')

类方法

class Person:
    @classmethod
    def leifangfa(cls, a):
        print('这是一个类方法', cls, a)

Person.leifangfa(123)

p = Person()
p.leifangfa(666)

func = Person.leifangfa
func(111)

class A(Person):
    pass

A.leifangfa(0)

这是一个类方法 <class ‘main.Person’> 123
这是一个类方法 <class ‘main.Person’> 666
这是一个类方法 <class ‘main.Person’> 111
这是一个类方法 <class ‘main.A’> 0

静态方法

class Person:
    @staticmethod
    def jingtaifangfa():
        print('这是一个静态方法')

Person.jingtaifangfa()
p = Person()
p.jingtaifangfa()

func = Person.jingtaifangfa
func()

补充

class Person:
    age = 0

    def shilifangfa(self):
        print(self)
        print(self.age)
        print(self.num)
    
    @classmethod
    def leifangfa(cls):
        print(cls)
        print(cls.age)
    
    @staticmethod
    def jingtaifangfa():
        print(Person.age)


p = Person()
p.num = 10
p.shilifangfa()

p.leifangfa()
Person.leifangfa()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值