首页 > 代码库 > 知识点:类

知识点:类

 

  • 类的构造器 __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只鱼

 

知识点:类