Python - 面向对象(代码详解)

目录

1.类和对象

2.定义类、创建对象、对象的简单使用

3.继承

4.将另外一个类的实例当作属性使用


1.类和对象

  • 类(Class):用来描述具有相同的属性和方法的对象的集合,它定义了该集合中每个对象所共有的属性和方法。
  • 对象(Instance,也可以叫实例):通过类定义的数据结构实例,是类的具体表现形式。

为了加深对类和对象的理解,我们可以把类看作是制造汽车的图纸,图纸是抽象的,当中告诉了你制造汽车所需要的材料和制作方法,而对象就是根据汽车图纸所制造出来的真实的汽车,它是可以实际使用的,因此对象也可以称为实例。

我们知道,一张图纸是可以制造很多量汽车的,因此,一个类同样可以创建多个对象。

2.定义类的方法、如何创建对象、对象的简单使用

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 定义类的方法
# 简单公式:class 自定义类名(object):
class Student(object):    # object代表了类的父类,是一种固定写法,规范上写上去比较好,也可以不写
    
# init方法讲解:
# 1、init方法是类的构造函数。该方法在类实例化对象的时候,会被自动调用,因此一般会用来给变量赋值,实现类的初始化。
# 2、self:
# (1)self代表的是类的实例化对象本身,也就是说,每次根据类创建不同对象的时候,self就分别代表了这些被创建的对象。
# (2)调用时不用传入相应的参数,因为在类创建对象的时候,会自动向init构造函数中传入该对象的实例作为实参。尽管不需要我们手动传参,但在定义类方法的时候还是必须要有,并且要写在首位。
# 3、init方法的形式参数中,除了有self,还自定义了name、age变量,因此在创建对象的时候,可以对应传入参数值,实现类属性的初始化。
# 4、属性如果带有前缀self,并且属性前面没有__,比如self.name,那么这个属性是可以被对象调用的。
# 5、属性名称如果带有__,说明这是一个私有属性,只能在类中使用,类对象是不能直接使用的,比如:__si_you_fang_fa()。
    def __init__(self,name,age):    
        self.name = name    # 会根据传进来的参数,给类对象的name属性赋值
        self.age = age    # 会根据传进来的参数,给类对象的age属性赋值
        self.hight = "180 cm"    # 也可以给类对象的hight属性赋予默认值
        self.__weight = "180 斤"                
        print(self)    # 会自动输出对象的内存地址

    def shang_ke(self):
        print(self.name + "正在上语文课")
        
    def xie_zuo_ye(self):
        print(self.name + "正在写作业")
        
    def update_age(self,new_age):
        self.age = new_age    # 通过方法更改属性的值
        
    def shi_yong_weight(self):
        return self.__weight
        
    def __si_you_fang_fa(self):
        print("我是私有方法")

    def yong_si_you_fang_fa(self):    # 类中的私有方法是不能被对象使用的,但是可以在类中使用,如果我们希望对象能够调用私有方法,我们可以通过类中的普通方法来作为中转,从而使用类的私有方法。
        self.__si_you_fang_fa()
    
    
# 创建对象的方法(也叫类的实例化)
# 简单公式:自定义对象名 = 类名(形式参数1,形式参数2,...)
good_student = Student(name='小高',age=18)    # 这样就根据Student类创建了一个good_student对象,并且给对应的形式参数传入了相应的实际参数。

# 对象的使用方法
# 1、使用对象中的变量
# 使用公式:对象名称.变量名
print(good_student.name)
print(good_student.age)
print(good_student.hight)
print(good_student.shi_yong_weight())    # 使用Student类中的私有属性,输出结果:180 斤。如果直接使用:print(good_student.__weight)是会报错的。

# 2、使用对象中的方法
# 使用公式:对象名称.方法名称()
# 可能这个例子中,类方法的功能有限,但是在实际项目中,我们可以通过这些类方法实现我们实际情况中所需要的功能,比如说,如果这个类应用在一个控制一个机器人中,我们可以通过类方法引导机器人去做写作业的动作。
good_student.shang_ke()
good_student.xie_zuo_ye()
good_student.yong_si_you_fang_fa()    # 使用Student类中的私有方法,输出结果:我是私有方法。如果直接使用:good_student.__si_you_fang_fa()是会报错的

# 3、直接修改类中属性的值
# 简单公式:对象名称.变量名 = 新的值
# 修改前
print(good_student.hight)    # 输出结果:180 cm
# 修改后
good_student.hight = "190 cm"
print(good_student.hight)    # 输出结果:190 cm

# 4、通过方法修改类中属性的值
# 修改前
print("我现在" + str(good_student.age) + "岁")    # 输出结果:我现在18岁
# 修改后
good_student.update_age(19)
print("我长大1岁了,现在" + str(good_student.age) + "岁了")    # 输出结果:我长大1岁了,现在19岁了


3.继承

#!/usr/bin/python
# -*- coding: UTF-8 -*-

class Student(object):

    def __init__(self,name,age):    
        self.name = name    
        self.age = age   
        self.hight = "180 cm"                   
        print(self)   

    def shang_ke(self):
        print(self.name + "正在上语文课")
        
    def xie_zuo_ye(self):
        print(self.name + "正在写作业")
        
    def update_age(self,new_age):
        self.age = new_age   

# 继承
# 简单公式:class 自定义类名(需要继承的父类名称):
class XueBa(Student):    # 这里继承了父类Student

    def __init__(self,name,age):
 # super()是一个特殊函数,可以帮助XueBa类调用Student类所有的属性。
 # 简单使用公式:super(子类名称,self).__init__(形式参数1,形式参数2,...)。这里要注意形式参数的数量要跟父类保持一致。
        super(XueBa,self).__init__(name,age)   
        self.nu_li = 1000    # 子类也可以有属于它自己的属性
        
    def kao_shi(self):    # 子类也可以有属于自己的方法
        print("因为我努力值达到" + str(self.nu_li) + ",所以我考试总是考满分")
        
    def shang_ke(self):    # 当然也可以重写父类的方法,这里重写父类的 shang_ke 方法
        print("语文老老师请假了,改上数学课")

xue_ba = XueBa("小黄",18)

print(xue_ba.name)    # 输出结果:小黄
xue_ba.xie_zuo_ye()    # 尽管子类没有 xie_zuo_ye 的方法,但是子类继承了父类,所以子类可以使用父类的方法

print(xue_ba.nu_li)    # 子类独有的 nu_li 属性
xue_ba.kao_shi()    # 子类独有的 kao_shi 方法

xue_ba.shang_ke()    # 输出结果:语文老老师请假了,改上数学课

4.将另外一个类的实例当作属性使用

#!/usr/bin/python
# -*- coding: UTF-8 -*-

class Student(object):

    def __init__(self,name,age):    
        self.name = name    
        self.age = age   
        self.hight = "180 cm"                   
        print(self)   

    def shang_ke(self):
        print(self.name + "正在上语文课")
        
    def xie_zuo_ye(self):
        print(self.name + "正在写作业")
        
    def update_age(self,new_age):
        self.age = new_age  


# 创建一个类,供后面的类实例化使用                                                                                                                                
class JiNeng(object):

    def __init__(self,te_chang='跆拳道'):
        self.te_chang = te_chang    
                
                                                
class XueBa(Student):    

    def __init__(self,name,age,te_chang):    # 添加te_chang形参,给JiNeng类赋值
        super(XueBa,self).__init__(name,age)   
        self.nu_li = 1000
        self.ji_neng = JiNeng(te_chang)    # 将另外一个类的实例当作属性使用  
        
    def kao_shi(self):    
        print("因为我努力值达到" + str(self.nu_li) + ",所以我考试总是考满分")
        
    def shang_ke(self):    
        print("语文老老师请假了,改上数学课")
        
xue_ba = XueBa("小高",19,"篮球")

# 将另外一个类的实例当作属性使用
# 简单公式:对象名称.另外一个类的对象名称.另外一个类的对象属性
print(xue_ba.ji_neng.te_chang)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值