第八章第5讲:python之面向对象的回顾

时间:2022-11-22 09:18:32

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()