python 中的对象创建方法
python
def __init__(self,name:str,age:int):
self._name=name
self._age=age
def __new__(self,name:str,age:int):
self.__init__(name,age)
print("创建对象Student")
def __init_subclass__(cls, **kwargs):
print('初始化父类')_
def __del__(self):
print("销毁Student对象")
#对象转字典
print(Student2.__dict__)
print(s1.__dict__)
python 中定义私用属性和私用方法
python
def __init__(self,name:str,age:int):
self._name=name
self._age=age
python
def __map2__(self):
m = {}
m["name"] = self._name
m["age"] = self._age
return m
def map(self):
return self.__map2__()
子类中调用父类的方法
python
class JuioriStudent(Student):
def __init__(self,name:str,age:int,sex:int):
#super().__init__(name,age)
Student.__init__(self,name,age)
self.sex = sex
python 中的static 方法如何定义,适用@staitcmethod
python
class A:
@staticmethod
def add(a,b):
return a+b
class B(A):
@staticmethod
def add(a,b,c):
return a + b + c
if __name__ == "__main__":
print(A.add(1,2))
print(B.add(1,2,3))
python 同一个类中不能实现和java 一样的根据参数列表的重载
def add(self, a,b):
return a + b
def add(self,a,b,c):
return a + b + c
python 为何是多继承
为了提高代码的服用性,更好运用mixin
多继承最大的理论难题是"菱形继承问题"(Diamond Problem),即当一个类从两个父类继承,而这两个父类又继承自同一个祖父类时,方法调用的顺序会产生歧义25。
Python 并没有回避这个问题,而是通过C3 线性化算法 (C3 Linearization)完美地解决了它。Python 会计算出一个方法解析顺序(MRO, Method Resolution Order),这是一个明确的列表,规定了在查找方法时应该遵循的顺序23。
python
class Father:
def __init__(self):
print("father")
self.money = 400
def getFatherMoney(self):
return "father money is {} ".format(self.money)
class Monther:
def __init__(self):
print("monther")
self.money = 300
def getMontherMoney(self):
return "monther money is {} ".format(self.money)
class Child(Father,Monther):
def __init__(self):
super().__init__()
print("child")
self.money = 200
def getMoney(self):
return "child money is: {} ".format(self.money)
- python 中支持重载,重写吗?
- **重写(Override)**:子类可以重新定义从父类继承的方法,以满足自身特定需求。例如,在子类中定义与父类同名的方法。
- 重载(Overload) :Python 不支持传统意义上的方法重载(即通过参数类型或数量区分多个同名函数),但可以通过默认参数、
*args、**kwargs或functools.singledispatch等方式模拟类似行为。