- 类的构造器 __init__
类的构造器为__init__(双下划线), 里面传递成员变量.使用self参数, 并把参数(argument)传递至self.val(泛指)的成员变量中.
成员函数, 可以使用self.val, 进行操作.
构造器__init__不能返回None以外的任何对象
1 class Person: 2 def __init__(self, name): #self是每个方法的默认参数,不需要设定,所有输入参数都是从第二个开始设置 3 self.name = name 4 def sayHi(self): 5 print(‘Hello, my name is ‘ + self.name) 6 7 8 p = Person(‘marian‘) #第一个参数self是默认参数,‘marian‘的设定是对name的赋值 9 p.sayHi() >>> Hello, my name is marian
- 类的继承
class DerivedClassName(baseClassName): #baseClassName:基类,父类或超类 ....
import random as r class Fish: def __init__(self): #类的构造方法 self.x = r.randint(0 , 10) self.y = r.randint(0 , 10) def move(self): self.x -=1 print("我是位置是",self.x,self.y) class Shark(Fish): #继承父类 def __init__(self): #重写父类方法 print("我要吃了你!") fish = Fish() fish.move()>>> 我是位置是 5 9
import random as r class Fish: def __init__(self): self.x = r.randint(0 , 10) self.y = r.randint(0 , 10) def move(self): self.x -=1 print("我是位置是",self.x,self.y) class Shark(Fish): def __init__(self): super().__init__() #如果要修改父类的方法,可以先继承父类中方法的内容。加入此句,可以解决下面的错误 print("我要吃了你!") shark = Shark() shark.move() ################################### #Traceback (most recent call last): # File "C:/Python33/test.py", line 17, in <module> # shark.move() # File "C:/Python33/test.py", line 9, in move # self.x -=1 #AttributeError: ‘Shark‘ object has no attribute ‘x‘ ######################################
>>>我要吃了你! >>>我是位置是 7 0
- 多重继承
class DerivedClassName(Base1 , Base2 , Base 3): ....
虽然python设计了多继承,但是尽量不要使用多继承,容易发生不可预料的问题。
注意: 当多继承时,如果多个父类中有相同的方法名或者属性名,优先调用先继承的父类的方法或者属性
多继承例子:
class Base1: def foo1(self): print("我是foo1,我为Base1代言!") class Base2: def foo2(self): print("我是foo2,我为Base2代言!") class C(Base1 , Base2): pass c = C() c.foo1() c.foo2() >>>我是foo1,我为Base1代言! >>>我是foo2,我为Base2代言!
- 屏蔽父类方法
子类可以用同名的方法覆盖父类的方法,函数体内容写成pass,这样调用该方法就没有任何作用了.
例子:企鹅继承鸟类,但是企鹅不会飞,如果屏蔽父类中鸟儿会飞的方法?
1 class Bird: 2 def fly(self): 3 print("fly away!") 4 5 class Penguin(Bird): 6 def fly(self): 7 pass 8 9 bird = Bird() 10 penguin = Penguin() 11 12 bird.fly() 13 penguin.fly() >>> fly away!
- 组合
把类的实例化 放到一个新类里面
class Turtle: def __init__(self , x): self.num = x class Fish: def __init__(self , x): self.num = x class Pool: def __init__(self , x , y): self.turtle = Turtle(x) self.fish = Fish(y) def printNum(self): print("水池里面有%d之乌龟和%d只鱼" % (self.turtle.num , self.fish.num)) pool = Pool(10,20) pool.printNum()>>>水池里面有10之乌龟和20只鱼
时间: 2024-10-26 20:18:56