面向对象--class(类)的基本概念

继承
类本身就是一种封装
定义一个类

class Animal:
    """这是一个动物"""
    def fly(self):    #每个类的方法,都会有一个路参。self 指向自己
        print("我可以飞")
        #这以上是实例化,定义一个类,把具体的方法放进去
        #上面就是说明这是一个动物
        #实例化:把这个具象为一个实体
a = Animal()   #a属于这一类动物,实例化没有继承,所以直接是类本身
a.fly()   #我可以飞    #因为a属于这个里面的类,所以他拥有这个类里面的属性和方法
print(a.__doc__)    #doc可以看到类里面的注释

面向对象--class(类)的基本概念_第1张图片

class Animal:
    """这是一个动物"""
    def fly(self):
        print("我可以飞")
    def eat(self):
         print("模拟吃的方法")
a = Animal()
a.fly()              #eat和fly是自己定义的函数名
a.eat()             #调用 的时候不仅可以调用a方法,也可以调用eat方法,他会自己显示。
print(a.__doc__)
#类功能的强大与否,取决于类里面的方法

面向对象--class(类)的基本概念_第2张图片

#__init__构造函数,所有类的构造方法都是这个,类的构造函数

在类实例化的时候会自动触发__init__方法
。在类实例化的时候会优先选择这个函数
class Animal:
    """这是个动物!"""
    def __init__(self, can_fly = False):   #can_fly 给的默认值,自己命名的
        #self默认的参数
        print("调用 __init__() 函数当实例化时!")  #这个print是为了展示,实例化的时候自动触发构造函数
        self.can_fly = can_fly     #self,指向的自己 #第一个can_fly是内置的属性 第二个can_fly是外面传入的参数
    def fly(self):      #这里的fly是自己定义的,和函数里的一样
        if self.can_fly:   #判断这个属性,是否可以飞。
            print("我可以飞!")
        else:
            print("我不能飞!")
a = Animal()    # 实例化的时候自动触发了__init__ 。因为实例化的时候并没有传入参数  # 调用 __init__() 函数当实例化时!
a.fly()                    # 所以,输出结果是“我不能飞!
                  #由于默认给的false 所以结果是“我不能飞”
b = Animal(can_fly = True) # 调用 __init__() 函数当实例化时!
                      #实例化的时候传进了一个True,所以参数就改变了
b.fly()                    # 我可以飞!
                        #这两个结果是“我可以飞”

面向对象--class(类)的基本概念_第3张图片

以上是python 2 的写法

稍微复杂一点的

class student(object):   #object  是最高的面向对象的类,顶级的父类。不写也没有问题。
                        #object是个类,表示student继承object这个类
    def __init__(self,name,score):
        self.name = name
        self.score = score

    def print_score(self):     #这个函数;打印分数
        print('%s :%s' % (self.name, self.score))  #直接调用自己的属性

    def get_score(self):
        if self.score >= 70:
            return "A"
        elif self.score>=50:
            return "B"
        else:
            return "C"

lufei = student("路飞",22)     #具体的实例lufei 这个人,属于student这个类。
                                 #因为__init__这个函数有两个参数(name,score),所以也要传入具体的两个值
print(f'路飞的名字 = {lufei.name}')  #.name--调的这个属性
print(f'路飞的分数 = {lufei.score}')
lufei.print_score()       #直接调用

# print_score()      #不能这样写(会报这个方法没有定义),因为实例化后他属于具体的某个实例,某个对象
print(f'路飞的分数等级= {lufei.get_score()}')

面向对象--class(类)的基本概念_第4张图片

你可能感兴趣的:(python)