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

一.创建与调用

17787668-382c109bb6e06f8d.png

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


17787668-f46264f7c380b7ff.png

调用 :


17787668-95715c409b3295b6.png

在类方法中调用类属性注意前面要加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()

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


17787668-b9a79be352cff030.png

二.类继承

17787668-46f702b2dc26224c.png

很多类在创建时也不带括号,但实际上也是有父类的, 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))
17787668-e179d0532af53b12.png

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

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)

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

17787668-eafae10051d15fc5.png
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()
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千喜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值