python类定义的讲解_python类的约束实例讲解

真正写写项目的代码时都是多人协作的,所以有些地方需要约束程序的结构。也就是说,在分配任务之前就应该把功能定义好,然后分别交给底下的程序员来完成相应的功能。

在python中有两种办法来约束类的方法:

第一种方法使用继承的特性:提取⽗类,然后在⽗类中定义好⽅法,在这个⽅法中什么都不⽤⼲,就抛⼀个异常就可以了。这样所有的⼦类都必须重写这个⽅法,否则访问的时候就会报错。

class Base:

def run(self):

raise NotImplementedError('子类没有实现login方法')

class Foo1(Base):

def run(self):

print('Foo1\'s Function')

class Foo2(Base):

def run(self):

print('Foo2\'s Function')

class Foo3(Base):

def run3(self): # Foo3中没有按规范重写run方法,这里会报错

print('Foo3\'s Function')

l1 = [Foo1(), Foo2(), Foo3()]

for item in l1:

item.run()

结果如下:

第二种方法是使⽤元类来描述⽗类:在元类中给出⼀个抽象⽅法,这样⼦类就不得不给出抽象⽅法的具体实现,也可以起到约束的效果。

from abc import ABCMeta, abstractmethod # 导入抽象元类和定义抽象方法的装饰器

class Aminal(metaclass=ABCMeta): # 在创建类的时候指定要使用ABCMeta元类

@abstractmethod

def eat(self): # 然后定义了一个抽象方法

pass

class Cat(Aminal):

pass

c = Cat()

c.eat()

上面的结果告诉我们,必须要实现抽象类才能实例化这个对象,手动重写这个方法后就能正常使用了:

from abc import ABCMeta, abstractmethod

class Aminal(metaclass=ABCMeta):

@abstractmethod

def eat(self):

pass

class Cat(Aminal):

def eat(self):

print('猫抓老鼠')

c = Cat()

c.eat()

# 结果:

# 猫抓老鼠

总结: 约束. 其实就是⽗类对⼦类进⾏约束. ⼦类必须要写xxx⽅法. 在python中约束的⽅式和⽅法有两种:

使⽤抽象类和抽象⽅法, 由于该⽅案来源是java和c#. 所以使⽤频率还是很少的

使⽤⼈为抛出异常的⽅案. 并且尽量抛出的是NotImplementError. 这样比较专业, ⽽且错误比较明确.(推荐)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值