在Python里定义类


栗子~

class Person:
    '''
    a class of person.
    '''
    # 类里面所需的常量
    n = 10 # 静态属性
    
    # 初始化方法
    def __init__(self, name, age):
        # 对象的属性, 比如一个人有名字和年龄
        self.name = name # 动态属性
        self.age = age   # 动态属性
    
    # 对象的行为, 比如打招呼
    def say_hi(self):
        return "hi"

来看看怎么调用叭~
因为我在jupyter notebook里面跑的代码块, print都被省略了!

# 调用类里面的常量
Person.n         # 10

# 创建实例
p = Person("Amy", 16)

p.name           # 'Amy'

p.age            # 16

p.say_hi()       # 'hi'

# 另一种调用方法
Person.say_hi(p) # 'hi'

接下来看看给类和对象添加属性~

# 给类添加属性
Person.sex = "Female"

p.sex            # "Female"

检查一下类里面是不是有sex这个属性了@.@
在这里插入图片描述

# 给实例添加属性
p.characteristic = "shy"

也检查一下:
在这里插入图片描述

继承inheritance

单继承

# student class 继承 Person class
class Student(Person): 
    def __init__(self, grade, name, age): # 在姓名年龄的基础上添加成绩属性
        self.grade = grade
        # 因为要继承Person的init方法, 以下两行代码二选一使用
        # Person.__init__(self, name, age) # 单继承两个都能用, 多继承必须用这个
        super().__init__(name, age) 
    
    # 创建一个根据成绩评等级的方法
    def level(self):
        if self.grade >= 90:
            return "A"
        elif self.grade >= 80:
            return "B"
        elif self.grade >= 70:
            return "C"
        else:
            return "F"
# 查看父类:
Student.__base__                 # __main__.Person

# 调用父类属性
Student.n                        # 10

# 新建student实例
s = Student(85, p.name, p.age)

s.level()                        # 'B'

s.say_hi()                       # 'hi'

多继承

class Father():
    def __init__(self):
        print("爸爸有一些性格, 比如: 固执")
    
    def hobbie(self):
        return "爸爸喜欢打球"
    
class Mother():
    def __init__(self):
        print("妈妈有一些性格, 比如: 内敛")
        
    def hobbie(self):
        return "妈妈喜欢弹琴"
    
class Me(Father, Mother):
    def __init__(self):
        print("我继承了爸爸妈妈的部分性格, 也有自己独立的性格")
        Father.__init__(self)
        Mother.__init__(self)

来新建一个实例:

me = Me()

输出:

我继承了爸爸妈妈的部分性格, 也有自己独立的性格
爸爸有一些性格, 比如: 固执
妈妈有一些性格, 比如: 内敛

# 查看继承优先级
Me.__mro__

(main.Me, main.Father, main.Mother, object)

# 当父类方法有冲突时会调用优先级高的方法
me.hobbie()

‘爸爸喜欢打球’

多态polymorphism

定义: 允许不同class的对象调用同一个方法,也可以说是一个方法可以接受不同类型的输入。一个很有名的例子:
在这里插入图片描述
其实因为我们在写python方法的时候不需要像java一样去确定输入参数类型,所以python的方法天生就是多态的。比如:

def add_one(x):
    return x+1

就这么一个简单的方法,我们的x可以是整数类也可以是小数类,这就是一种多态的表现。

封装encapsulation

定义:将部分属性和方法私有化,从而起到保护的作用。用变量名前添加两个下划线来实现,举个栗子:
在这里插入图片描述
从上图我们不难看出从class的外部是无法访问name这个属性的~ (只能在这个class里面用!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失眠软糖12

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值