1.__init__方法
1.1 介绍
__init__方法是 Python 中面向对象编程中类的特殊方法,也称为构造方法,当创建一个类的实例时,__init__方法会自动调用。
self参数是必须的,它代表创建的对象本身,在方法内部可以通过self来引用对象的属性和方法。除了self以外的其他参数是可选的,根据实际需求定义。
1.2 示例代码
class HttpRequest(object):
#
def __init__(self, name, age):
self.name = name
self.age = age
request = HttpRequest('小杨', 19)
request.city = "北京"
print(request.name) # 输出结果为:小杨
print(request.age) # 输出结果为:
print(request.city) # 输出结果为:北京
1.3 注意事项
__init__方法在对象创建时自动调用,无需手动调用。__init__方法可以接收任意数量的参数,但必须遵循特定的参数签名。- 在
__init__方法中,必须给对象的每一个属性赋值,否则该对象将不完整,不能正常工作。 - 可以在
__init__方法中调用其他方法,但请注意不要在初始化的过程中产生太多的计算,因为这可能会影响程序的性能。 - 一个类可以没有
__init__方法,在这种情况下,程序将以默认方式创建该类的对象。
2.super()方法
2.1 综述
根据类的【继承关系】,逐步往上找,并不是单纯找父类中的方法;
2.2 示例代码一
class Base:
def f1(self):
print("Base")
class Foo(Base):
pass
class Bar(Foo):
def f1(self):
print("Bar")
super().f1()
obj = Bar()
obj.f1() # 执行结果为:[Bar,Base]
2.3 示例代码二
class Base:
def f1(self):
print("Base")
class Foo:
def f1(self):
print("Foo")
class Bar(Foo,Base):
def f1(self):
print("Bar")
super().f1()
obj = Bar()
obj.f1() # 执行结果为[Bar,Foo]
2.4 示例代码三
class Base:
def f1(self):
print("Base")
class Foo:
def f1(self):
print("Foo")
super().f1()
class Bar(Foo,Base):
def f1(self):
print("Bar")
super().f1()
obj = Bar()
obj.f1() #执行结果为: [Bar,Foo,Base]
2.5 示例代码四
class Base:
def f1(self):
print("Base")
class Foo:
def f1(self):
print("Foo")
super().f1()
class Bar(Foo,Base):
def f1(self):
print("Bar")
super().f1()
obj = Foo()
obj.f1() # 代码报错,因为Foo父类为object,没有f1方法
3.__init__和super的用法
3.1 示例代码
class Parent:
def __init__(self, value1, value2):
self.value1 = value1
self.value2 = value2
class Child(Parent):
def __init__(self, value1, value2, value3):
super().__init__(value1, value2)
self.value3 = value3
obj = Child('v1', 'v2', 'v3')
print(obj.value1) # 输出结果为v1
print(obj.value2) # 输出结果为v2
print(obj.value3) # 输出结果为v3
3.2 说明
在上述示例中,Child继承了Parent的所有属性,并且在其中添加了额外的value3 属性。调用 super().__init__(value1, value2) 可以访问父类的__init__方法,并将其初始化为value1 和value2。