回顾【类和对象】+44、45魔法方法

Python面向对象编程详解:封装、继承与多态
本文详细介绍了Python中的面向对象编程特性,包括封装、继承和多态的概念。解释了如何定义私有变量和方法,以及子类如何覆盖父类方法。还讨论了多继承的风险,并提到了属性重名可能导致的问题。文章深入探讨了__dict__属性以及属性相关的魔法方法,如__getattr__、__getattribute__、__setattr__和__delattr__的用途。此外,还分享了如何避免属性魔法方法导致的死循环问题。最后,提到了Python的timeit模块用于测量代码执行时间,以及类参数的传递方式,包括构造函数__init__的应用。

1.oo(面向对象)特征:

封装,继承,多态

2.共有和私有:

在python中定义私有变量或函数,只需要在名字前面加上'__'两个下滑线

3.子类方法与父类重名时,会覆盖父类的方法

 4.继承:子类方法名和父类方法重名时,仍需要继承父类方法

 5.多继承:不建议使用,会产生意想不到的bug

 6.属性名与方法名重名,会覆盖方法

7.'__dict__'方法

8.属性相关的魔法方法

魔法方法含义
__ getattr__(self, name)定义当用户试图获取一个不存在的属性时的行为
__ getattribute__(self, name)定义当该类的属性被访问时的行为
__ setattr__(self, name, value)定义当一个属性被设置时的行为
__ delattr__(self, value)定义当一个属性被删除时的行为

9.属性魔法方法初学者容易犯死循环如何避免?

第一种:用super()来调用基类,比如:super().__ setattr__(name, value)

第二种:给特殊属性__ dict__赋值,比如:self.__ dict__[name] = value

10.python提供了强大的计时库:timeit,可以得到一段程序的运行时间:

# timeit(函数名_字符串,运行环境_字符串,number=运行次数)
t = timeit('i for i in range(10) if i%2==0', number=1000)

11.类传参的方法,通过构造函数__init__()传递参数

#python类可以传递参数,方法是采用__init__初始化方法进行对象传参,实例化时传入所需参数。

class Test(继承的类名):                              
    def __init__(self,initval=None,name=None):     #构造函数带参数,实例化时就要带参数
        self.val = initval                           
        self.name = name

t = Test(10,'ten')                                 #实例化                                
#构造函数未带参数,实例方法带参数,实例化无需带参数,调用方法时带参数即可

class Person():                   #定义类
    def __init__(self):           #构造函数不带参数
       print("jjj")
    def run(self,name,leg=8):     #方法带参
        print("我会跑")
        print(name)
        print(leg)
    def fly(self):
        print("我会飞")

zwj=Person()                      #实例化时不需要带参数
zwj.run("lt")                     #调用方法需要带参


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值