【Python笔记11】

一、类方法

  • 二、静态方法
  • 三、__del__方法(析构函数)
  • 四、__call__方法
  • 五、重名方法
  • 六、方法的动态性

一、类方法

1.格式:

@classmethod

def 类方法名(cls[,参数列表])

    方法体

2.注意:

@classmethod必须位于方法上面一行

第一个cls必须有,指类对象本身

调用:类名.类方法名(参数列表),不能给cls传值

类方法中访问实例属性和实例方法会出错

二、静态方法

1.格式:

@staticmethod

def 静态方法名(参数列表)

    方法体

2.注意:

@staticmethod位于静态方法第一行

调用:类名.静态方法名

静态方法中调用实例属性和实例方法会出错

class Student():
    score=100
    @classmethod     #类方法
    def printScore(cls):
        print(cls.score)
    @staticmethod    #静态方法
    def add(a,b):
        print("{0}+{1}={2}".format(a,b,(a+b)))
        return(a+b)
Student.add(10,20)
Student.printScore()

三、__del__方法

1.用于实现对象销毁,释放对象占用的资源

class Person():
    def __del__(self):
        print("销毁对象:{0}".format(self))
p1=Person()
p2=Person()
del p2
print("程序结束")

销毁对象:<__main__.Person object at 0x0000029DC095FDF0>    #销毁p2
程序结束
销毁对象:<__main__.Person object at 0x0000029DC095FFD0>    #销毁p1

四、__call__方法

1.定义了__call__方法,称为可调用对象,可像函数一样被调用

class Salary():
    print("计算工资")
    def __call__(self, salary):
        yearsalary=salary*12
        monthsalary=salary
        daysalary=salary/22.5
        hoursalary=daysalary/8
        return dict(yearsalary=yearsalary,monthsalary=monthsalary,daysalary=daysalary,hoursalary=hoursalary)
s=Salary()
print(s(4000))

 计算工资
{'yearsalary': 48000, 'monthsalary': 4000, 'daysalary': 177.77777777777777, 'hoursalary': 22.22222222222222}

五、重名方法

1、其他语言中,可以定义多个重名方法,具有方法重载,而在Python中方法的参数没有类型区分,因此Python中没有方法重载,如果定义重名方法,只有最后一个有效。

class Person():
    def say(self):
        print("Hello!")

    def say(self,name,age):
        print("Hi,everyone!")
p1=Person()
p1.say("小明",18)
p1.say()    #不带参数,会报错

TypeError: say() missing 2 required positional arguments: 'name' and 'age'
Hi,everyone!

六、方法的动态性

1.利用方法、函数即对象,对类外的方法进行调用

class Person:
    def work(self):
        print("星期一到星期五上班")

def play_game(a):
    print("{0}在周末玩游戏".format(a))
def work2(a):
    print("好好工作,努力挣钱")
p1=Person()
p1.work()
Person.play=play_game
p1.play()
Person.work=work2
p1.work()

星期一到星期五上班
<__main__.Person object at 0x0000026246763FD0>在周末玩游戏
好好工作,努力挣钱


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

In my opinion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值