[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