第八章第5讲:python之面向对象的回顾
1.什么是类与对象?
类是对现实世界中一些事物的封装。定义一个类可以采用下面的方式:
class ClasName: #类名首字母大写
pass
注意:1.类名后面有冒号
2.在pass代码桩中可以定义属性和方法
3.当一个类被定义后,就产生了一个类对象
4.类对象支持两种操作:对象的引用和实例化
# People类定义完成之后,就产生了一个全局的类对象,可以通过该类对象来访问类中的属性和方法 class People: # 定义了一个属性 name = "Bela" # 定义了一个方法 def getName(self): print(self.name) # 类的应用 print(People.name) # 类的实例化 p = People()
2.属性与方法
属性:
class People: # 定义了一个属性 name = "Bela" age = 12 # 定义了一个方法 def getName(self): print(self.name) # 类的应用 print(People.name) # 类的实例化 p = People() print(p.name) print(p.age)
解释:定义了People类,里面定义了name,age属性,默认值分别为Bela,12。定义了之后就可以用来产生实例化对象,如p = People(),实例化了一个对象p,然后可以通过p来读取属性,这里name,age都是共有属性,可以直接通过对象名访问。
私有属性:
class People: # 定义了2个私有属性 __name = "Bela" __age = 12 # 定义了一个方法 def getName(self): print(self.__name) # 类的应用 print(People.__name) # 类的实例化 p = People() # 私有属性外部访问不到 print(p.__name) print(p.__age)
方法:在类中可以根据需要定义一些方法,定义方法采用的def关键字,在类中定义的方法至少会有一个参数(self),而且self一定是第一个参数
class People: # 定义了2个私有变量 __name = "Bela" __age = 12 # 定义了一个方法 def getName(self): return self.__name # 类的实例化 p = People() print(p.getName())
3.特殊(专有、内置)方法 __init__
Python中有一些内置的方法,这些方法命。名都有比较特殊的地方(其方法名以2个下划线开始,然后以2个下划线结束)。
__init__方法在类的一个对象被建立时,立刻运行,这个方法可以用来对对象做一些初始化的操作。
class People: # 定义了2个私有变量 def __init__(self,name,age): self.__name = name self.__age = age # 定义了一个方法 def getName(self): return self.__name # 类的实例化 p = People("Bela",12) print(p.getName())
4.封装、继承、多态
继承:
class Person: def __init__(self,name,sex): self.name = name self.sex = sex def print_title(self): if self.sex == "male": print("man") elif self.sex == 'female': print('woman') class Child(Person): # 代码桩 pass May = Child("May","female") Peter = Person("Peter","male") print(May.name,May.sex,Peter.name,Peter.sex) print(May.print_title()) print(Peter.print_title())
多态:
class Person: def __init__(self,name,sex): self.name = name self.sex = sex def print_title(self): if self.sex == "male": print("man") elif self.sex == 'female': print('woman') class Child(Person): def print_title(self): if self.sex == "male": print('boy') elif self.sex == "female": print('girl') May = Child("May","female") Peter = Person("Peter","male") print(May.name,May.sex,Peter.name,Peter.sex) print(May.print_title()) print(Peter.print_title())
子类与父类都存在相同方法print_title()方法,子类的print_title()覆盖了父类的print_title()方法,在代码运行时(print(May.print_title())),会调用子类的print_title()