【python进阶篇】面向对象_2

本文详细解释了Python中的绑定方法(通过对象调用时自动传参)与非绑定方法(无需绑定对象,可自由使用)的区别,以及类方法(绑定给类调用,以类作为第一个参数)和静态方法(无self参数,适用于通用操作)的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

绑定方法与非绑定方法

绑定方法

绑定给谁就由谁来调用,谁来调用就把他当作一个参数自动传入


类中talk_info绑定给对象使用:

class People:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def talk_info(self):
        print('222')
p = People('XX',20)
print(People.talk_info)  # 用类去调用是当作普通函数使用的 <function People.talk_info at 0x0000018D815187C0>
print(p.talk_info)    # 用对象去调用则为绑定方法 <bound method People.talk_info of <__main__.People object at 0x0000018D815F6150>>
People.talk_info(p)   # 需要传入对象
p.talk_info()   # 直接调用

将talk_info绑定给类使用:

class People:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    @classmethod
    def talk_info(cls):  # cls和self都是一种命名习惯,cls作为第一个参数表示类本身
        return cls('XX',20)
p = People.talk_info()   # 不需要传对象了

和对象绑定方法一样:绑定给类就由类来调用,并将类作为第一个参数传入。

和对象绑定方法不同:当对象在调用类的绑定方法的时候,也会默认把类当作参数传递进去。


非绑定方法

不需要绑定类或者对象来使用,谁都可以用,没有自动传值的效果。

在python类中会默认给函数一个实例用于绑定给对象,而解除这个绑定关系就要用到@staticmethod方法

class People:
    def __init__(self,name):
        self.name = name
    @staticmethod
    def info():   # 直接去掉self就会报错,在前面加上@staticmethod
        print('hello')
e = People('XX')
e.info()   # hello
People.info()  # hello

也可以传参:

class People:
    def __init__(self,name):
        self.name = name
    @staticmethod
    def info(x,y):   # 直接去掉self就会报错,在前面加上@staticmethod
        print('hello')
        print(x,y)
e = People('XX')
e.info(20,50)   # hello      20 50
People.info('cc','zz')  # hello     cc zz

绑定方法的应用:

没有类方法:

import setting
class People:
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
    def info(self):
        print('Name:%s Age:%d Sex:%s'%(self.name,self.age,self.sex))
z = People(setting.name,setting.age,setting.sex)
y = People(setting.name,setting.age,setting.sex)
x = People(setting.name,setting.age,setting.sex)
w = People(setting.name,setting.age,setting.sex)

有类方法:

import setting
class People:
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
    @classmethod
    def from_con(cls):
        obj = People(setting.name, setting.age, setting.sex)
        return obj   
    def info(self):
        print('Name:%s Age:%d Sex:%s'%(self.name,self.age,self.sex))
z = People.from_con()
y = People.from_con()
x = People.from_con()
w = People.from_con()

非绑定方法:

# 给每个人生成一个id号
import time
class People:
    def __init__(self,name,age):
        self.name = name
        self.age = age
        self.id = People.creat_id()  # 自动生成id号
    @staticmethod
    def creat_id():
        m = str(time.time())  # 根据时间不同创建值
        return m
p1 = People('一花',20)
time.sleep(0.2)
p2 = People('二乃',21)
time.sleep(0.2)
p3 = People('三玖',22)
print(p1.id)   # 1705463322.2089322
print(p2.id)   # 1705463322.4089973
print(p3.id)   # 1705463322.609788

..是我太天真了。学到这里就想做飞机大战小游戏。。好多码。。好多好多好多。。

。。以后再填个坑。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值