python中实例对象添加方法的方式和类中添加类方法,静态方法的方式

本文探讨了在Python中如何为实例对象添加动态方法,以及如何在类级别上添加静态方法和类方法。通过示例展示了实例对象的自定义行为扩展,以及类级别的静态方法和类方法的实现过程。

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

import types
class Person(object):

    def __init__(self, newName, newAge):
        self.name = newName
        self.age = newAge
    def eat(self):
        print("————%s正在吃" %self.name)
def run(self): #动态的方法
    print("————%s正在跑" % self.name)
P = Person("p2",20)
p1 = Person("p1",10)
p1.eat()
# p1.run = run
# p1.run()
# #虽然p1对象中run属性已经指向了第八行的函数,但是这句代码还不正确。
# #因为run属性指向的函数是后来添加的,即p1.run()的时候,并没有把p1当做一个参数,
# #导致了第八行的函数调用的时候,出现且少参数的问题。

#实例对象添加方法的方式:以下两种都可以,一般使用第一种即p1.run = types.MethodType(run.p1) , p1.run() 这种方便找到外部的动态方法
# p1.run = types.MethodType(run,p1) #将函数run,添加到p1的对象里面。对象里添加函数的方法。
# p1.run()
xxx = types.MethodType(run,p1)
'''
相当于
def eat(self):  def eat(p1):
将p1对象定位到self

'''
xxx()


@staticmethod
def test(): #静态方法。
    print("---------static method--------------")

Person.test = test #给类属性添加静态的方法,添加的时候是把类属性里面添加静态的方法,里面的属性名,指向了外面的静态方法
Person.test() #直接使用类.类的属性访问外部添加的静态方法。实际是Person.test指向了外部定义的静态方法test()


@classmethod
def printNum(cls): #定义一个类的方法。
    print("-----------class method-----------------")


#将类的方法添加到类属性里面去。
Person.printNum = printNum  #将类的属性指向了外部的类属性printNUm,其中的Person.printNum中的printNum的名字可以自己命名,这里取相同的名字只是为了便于记忆外部的方法。
Person.printNum() #执行方法


执行的结果:

————p1正在吃
————p1正在跑 #实例对象添加动态方法
---------static method--------------  #使用类进行添加静态的方法。
-----------class method----------------- #类添加类的方法


Process finished with exit code 0

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值