3-6 python面向对象

[created_at:2020-06-06] [python3]*
附:菜鸟教程

  • Python设计上就是一门面向对象的语言
  • 面向对象的开发使复杂的事情的简单化,符合人的思维习惯:
    分析有哪些类
    每个类有哪些属性和行为
    类和类之间的关系

类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
方法:类中定义的函数。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
局部变量:定义在方法中的变量,只作用于当前实例的类。
实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例如,Dog是一个Animal)。
实例化:创建一个类的实例,类的具体对象。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

"""学习类的属性引用"""
class Person():    #类定义
    name='noname'
    def get_name(self):    #类方法,第一个参数必须是self,代表类的实例
        return self.name  #类变量,用self修饰

#可直接访问类的属性
print('Person类的name属性值:'+Person.name)
#实例化一个类,给类的具体对象一个别名
p=Person()
print('实例p的name属性值:'+p.name)
print('调用实例p的get_name方法:'+p.get_name())
#可修改实例类的属性,不影响类的属性
p.name='newname'
print('修改实例p的name属性后,实例类的name属性值:'+p.name)
print('修改实例p的name属性后,Person类的name属性值:'+Person.name)
#一旦实例化的类,如果修改类的属性,不影响实例对象的属性
Person.name='updatename'
print('修改Person类的属性后,Person类的name属性值:'+Person.name)
print('修改Person类的属性后,实例p的name属性值:'+p.name)

>>>输出结果>>>
Person类的name属性值:noname
实例p的name属性值:noname
调用实例p的get_name方法:noname
修改实例p的name属性后,实例p的name属性值:newname
修改实例p的name属性后,Person类的name属性值:noname
修改Person类的属性后,Person类的name属性值:updatename
修改Person类的属性后,实例p的name属性值:newname
"""学习类的属性作用域"""
class person():
    name=''
    age=0
    __weight=0      #__可以定义私有变量,无法直接通过修改实例属性的方式修改,可以通过初始化修改
    __height=0
    def __init__(self,n,a,h): #定义构造方法,可以通过参数实例化类的属性
        self.name=n
        self.age=a
        self.__height=h
    def set_weight(self,w):     #定义方法,可以修改私有变量
        self.__weight=w
    def get_age(self):
        print("%s%d岁了"%(self.name,self.age))
    def get_weight(self):
        print("%s体重%d"%(self.name,self.__weight))
    def get_height(self):
        print("%s身高%d"%(self.name,self.__height))

#实例化类
p=person('小明',10,100)
p.get_age()
p.__weight=80
p.__height=80
p.get_weight()
p.get_height()
p.set_weight(80)
p.get_weight()

>>>执行结果>>>
小明10岁了
小明体重0
小明身高100
小明体重80
"""
学习类的继承,方法重写
"""
class Animal():
    def __init__(self,name,color,age,sex):
        self.name=name
        self.color=color
        self.age=age
        self.sex=sex

    def get_decrib(self):
        print(f"{self.name} {self.color} {self.age} {self.sex} ")

class Cat(Animal):
    def __init__(self,color,age,sex):   #定义自己的构造函数
        name = "猫"
        Animal.__init__(self,name,color,age,sex)    #调用父类的构造函数
        self.hair="短毛"

    def get_decrib(self):       #覆写父类的方法
        print(f"{self.name} {self.color} {self.age} {self.sex}  {self.hair}")

if __name__=="__main__":
    animal_a=Animal(name="兔子",color="白色",age="3个月大",sex="公的")
    animal_a.get_decrib()

    cat_a=Cat(color='黑色',age='3岁了', sex='母的')
    cat_a.get_decrib()

>>>执行结果>>>
兔子 白色 3个月大 公的 
猫 黑色 3岁了 母的  短毛
"""
学习类的继承,方法重写
"""
class Bycycle():
    def run(self,km):
        print(f"人工骑行里程数(km):{km}")
class EBycycle(Bycycle):
    def __init__(self,battery):
        self.battery=battery
        self.max_mile = self.battery * 10
    def autorun(self):
        print(f"自动骑行里程数(km):{self.max_mile}")
    def run(self,km):
        if km> self.max_mile:
            self.autorun()
            #调用父类被覆盖的方法
            super().run(km-self.max_mile)
        else:
            print(f"自动骑行里程数(km):{km}")

if __name__=="__main__":
    eb=EBycycle(20)
    eb.run(300)

>>>执行结果>>>
自动骑行里程数(km):200
人工骑行里程数(km):50

[导航目录]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类...
    chen_000阅读 790评论 2 2
  • Python从设计之初就已经是一门面向对象的语言。 面向对象技术简介 类(Class): 用来描述具有相同的属性和...
    S大偉阅读 315评论 0 0
  • Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我...
    阿靖哦阅读 328评论 0 0
  • 面向对象术语 类(Class):用来描述具有相同属性和方法的对象集合。它定义了该集合中每个对象所共有的属性和方法。...
    dwy_interesting阅读 224评论 0 0
  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,236评论 4 16