类,继承,多态

继承

  • Python是多继承
  • 子类:派生类 父类:基类
class 子类(父类1,父类2,...):

多个父类的继承

class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def say_hi(self):
            print('你好,我叫{0},年龄是{1}'.format(self.name,self.age))
            
class Student(Person):
    def __init__(self,name,age,stu_id):
        # 在子类中通过“类名”调用父类的方法
        Person.__init__(self,name,age)
        self.stu_id = stu_id
    def say_hello(self):
        Person.say_hi(self)
        print('我是学生,我的学号是',self.stu_id)

单层继承

  • super()函数
class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def say_hi(self):
            print('你好,我叫{0},年龄是{1}'.format(self.name,self.age))
            
            
class Student(Person):
    def __init__(self,name,age,stu_id):
        
        super(Student,self).__init__(name,age) # super().__init__(name,age)
        self.stu_id = stu_id
    def say_hello(self):
        Person.say_hi(self)
        print('我是学生,我的学号是',self.stu_id)
        
s = Student('tom',20,'201610101')
s.say_hello()

'''
你好,我叫tom,年龄是20
我是学生,我的学号是 201610101
'''

查看类的继承关系

Student.mro()

'''
[__main__.Student, __main__.Person, object]
'''

方法重写

class Dimension:
    def __init__(self,x,y):
        self.x = x
        self.y =y
    def area(self):
        pass
    
class Circle(Dimension):
    def __init__(self,r):
        Dimension.__init__(self,r,0)
        
    def area(self):
        return 3.14*self.x*self.x
 

class Rectangle(Dimension):
    def __init__(self,w,h):
        Dimension.__init__(self,w,h)
        
    def area(self):
        return self.x*self.y  # 不可以写成self.w*self.h
    

d1 = Circle(2)
d2 = Rectangle(1,2)
print(d1.area())
print(d2.area())
class Dimension:
    def __init__(self,x,y):
        self.x = x
        self.y =y
    def area(self):
        pass
    
class Circle(Dimension):
    def __init__(self,r):
        Dimension.__init__(self,r,0)
        
    def __area(self):
        return 3.14*self.x*self.x
  
d1 = Circle(2)
print(d1._Circle__area())

'''
12.56
'''

多态

  • 方法的重载与重写,与运算符的重载
class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __str__(self): # 特殊方法--用于输出
         return '{0},{1}'.format(self.name,self.age)
p = Person('tom',20)
print(p) # 默认调用str方法,相当于Java里面toString()默认不写

'''
tom,20
'''
x = 1
y = 2
x+y  # 3
x.__add__(y) # 3

运算符重载

class MyList:
    def __init__(self,x,y):
        self.x = x
        self.y = y
        
    def __add__(self): # 把加号运算符重新进行改写
        for i in range(4):
            print(i,end=' ')
            
list1 = MyList(1,2)
list1.__add__() # 0 1 2 3

猜你喜欢

转载自blog.csdn.net/qq_39504764/article/details/83269628