美文网首页AR之道工作生活
Python基础学习之路(七) ------ 类/继承/重写

Python基础学习之路(七) ------ 类/继承/重写

作者: 千喜Ya | 来源:发表于2019-07-19 14:49 被阅读1次

    一.创建与调用


    可以看到:实例方法的创建语句,和函数的定义语句很类似,唯一不同的是:实例方法中有个必须放在首位的参数self。
    特殊参数self的作用:self会接收实例化过程中传入的数据,当实例对象创建后,实例便会代替 self,在代码中运行。换言之,self 是所有实例的替身



    调用 :



    在类方法中调用类属性注意前面要加self :
    class Chinese:
    
        name = '吴枫'  # 类属性name
    
        def say(self):     
            print(self.name + '是中国人')
    
    person = Chinese()   # 创建Chinese的实例person
    person.say()         # 调用实例方法
    

    同理,如果想在类的方法内部调用其他方法时,我们也需要用到self来代表实例。

    第一点:只要在类中用def创建方法时,就必须把第一个参数位置留给 self,并在调用方法时忽略它(不用给self传参)。
    第二点:当在类的方法内部想调用类属性或其他方法时,就要采用self.属性名self.方法名的格式。

    初始化方法 :
    定义初始化方法的格式是def __init__(self),是由init加左右两边的【双】下划线组成( initialize “初始化”的缩写)。

    初始化方法的作用在于:当每个实例对象创建时,该方法内的代码无须调用就会自动运行。

    class Chinese:
        def __init__ (self):
            self.mouth = 1  # self.不能丢
            self.eye = 2
        
        def body(self):
            print('我有%s张嘴巴' % self.mouth)
            print('我有%s只眼睛' % self.eye)
    
    person = Chinese()
    person.body()
    

    使用初始化方法可以不定义类属性,self后面传参,赋值创建类属性 :

    class Chinese:
        # 初始化方法的创建,init两边双下划线。
        def __init__(self, hometown):
            self.hometown = hometown
            print('你在哪里出生?')
        
        def born(self):
            print('我生在%s。' % self.hometown)
    
    wufeng = Chinese('广东') # 传给参数hometown
    wufeng.born()
    

    面向对象和面向过程的区别:


    二.类继承


    很多类在创建时也不带括号,但实际上也是有父类的,class Chinese:在运行时相当于class Chinese(object):。而object,是所有类的父类,我们将其称为根类(可理解为类的始祖)。

    判断某个实例是否属于某个类 : 函数isinstance()

    # 阅读完代码再运行。
    class Chinese:
        pass
    
    class Cantonese(Chinese):
        pass
    
    gonger = Chinese()
    # 宫二,电影《一代宗师》女主,生于东北
    yewen = Cantonese()
    # 叶问,电影《一代宗师》男主,生于广东
    
    print('\n验证1:子类创建的实例同时也属于父类')
    print(isinstance(gonger,Chinese))  
    print(isinstance(yewen,Chinese))  
    
    print('\n验证2:父类创建的实例不属于子类。')
    print(isinstance(gonger,Cantonese))
    
    print('\n验证3:类创建的实例都属于根类。')
    print(isinstance(gonger,object))  
    print(isinstance(yewen,object))
    

    多层继承 : 子类创建的实例可调用所有层级父类的属性和方法。

    class Earthman:
        eye_number = 2
    
    #中国人继承了地球人
    class Chinese(Earthman):
        eye_color = 'black'
    
     #广东人继承了中国人,同时也继承了地球人。
    class Cantonese(Chinese):
        pass
    
    yewen = Cantonese()
    print(yewen.eye_number)
    print(yewen.eye_color)
    

    多重继承 : 和子类更相关的父类会放在更左侧。创建的实例在调用属性和方法时,会先在左侧的父类中找,找不到才会去右侧的父类找。(可理解为“就近原则”)

    image.png

    三.重写

    class Chinese:
    
        def land_area(self,area):
            print('我们居住的地方,陆地面积是%d万平方公里左右。'% area)
    
    class Cantonese(Chinese):
        # 间接对方法进行重写
        def land_area(self, area, rate = 0.0188):
            Chinese.land_area(self, area * rate)
            # 直接继承父类方法,再调整参数。
    
    gonger = Chinese()
    yewen = Cantonese()
    gonger.land_area(960)
    yewen.land_area(960)
    

    子类继承父类方法的操作是在def语句后接父类.方法(参数),如上述代码的第八、九行。

    重写示例 :

    class Chinese:
    
        def __init__(self, greeting = '你好', place = '中国'):
            self.greeting = greeting
            self.place = place
    
        def greet(self):
            print('%s!欢迎来到%s。' % (self.greeting, self.place))
    
    class Cantonese(Chinese):
    
        def __init__(self, greeting = '雷猴', place = '广东'):
            Chinese.__init__(self, greeting, place)
        
    yewen = Cantonese()
    yewen.greet()
    

    相关文章

      网友评论

        本文标题:Python基础学习之路(七) ------ 类/继承/重写

        本文链接:https://www.haomeiwen.com/subject/wnbpcctx.html