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

被折叠的 条评论
为什么被折叠?



