二手房地产中介网站建设,小说搜索风云榜排名,怎么让网站让百度收录,做网站的是什么再谈抽象
对象
多态 即便你不知道变量指向的是哪种对象#xff0c;也能够对其执行操作封装 向外部隐藏不必要的细节。继承
类
class Person: def set_name(self, name): self.name name def get_name(self): return self.name def greet(self): print(Hello, world…再谈抽象
对象
多态 即便你不知道变量指向的是哪种对象也能够对其执行操作封装 向外部隐藏不必要的细节。继承
类
class Person: def set_name(self, name): self.name name def get_name(self): return self.name def greet(self): print(Hello, world! Im {}..format(self.name))self 指向对象本身
如果foo是一个Person实例可将foo.greet()视为Person.greet(foo)的简写但后者的多态性更低。
class Cls:def func():print(no self)Cls.func()
no self
cls Cls()
cls.func()
Traceback (most recent call last):File pyshell#6, line 1, in modulecls.func()
TypeError: Cls.func() takes 0 positional arguments but 1 was given私有方法或属性成为私有的不能从外部访问只需让其名称以两个下划线打头即可。
不希望名称被修改又想发出不要从外部修改属性或方法的信号可用一个下划线打 头。
‘遮盖’
class MemberCounter: members 0 def init(self): MemberCounter.members 1# 新值被写入m1的一个属性中这个属性遮住了类级变量m1.members Two m1.members
Two m2.members
2探讨继承关系 issubclass 确定一个类是否是另一个类的子类 isinstance 要确定对象是否是特定类的实例 bases 如果你有一个类并想知道它的基类 class 如果你要获悉对象属于哪个类
接口和内省
hasattr(tc, ‘talk’) 检查所需的方法是否存在getattr(tc, ‘talk’, None) 返回对象的属性 callable(getattr(tc, ‘talk’, None)) callable 判断对象是否是可调用的setattr 与getattr功能相反可用于设置对象的属性dict 要查看对象中存储的所有值
内省模块inspect
抽象基类和isinstance
from abc import ABC, abstractmethod class Talker(ABC): abstractmethod def talk(self): pass h Herring() isinstance(h, Talker)
False# 可将Herring注册为TalkerTalker.register(Herring)
class __main__.Herring isinstance(h, Talker)
True issubclass(Herring, Talker)
True# 这种做法存在一个缺点就是直接从抽象类派生提供的保障没有了class Clam:
... pass
... Talker.register(Clam)
class __main__.Clam issubclass(Clam, Talker)
True c Clam() isinstance(c, Talker)
True c.talk()
Traceback (most recent call last): File stdin, line 1, in module
AttributeError: Clam object has no attribute talk换而言之应将isinstance返回True视为一种意图表达。在这里Clam有成为Talker的意图。本着鸭子类型的精神我们相信它能承担Talker的职责但可悲的是它失败了。
小结
对象对象由属性和方法组成。属性不过是属于对象的变量而方法是存储在属性中的函数。相比于其他函数关联的方法有一个不同之处那就是它总是将其所属的对象作为第一个参数而这个参数通常被命名为self。
类类表示一组或一类对象而每个对象都属于特定的类。类的主要任务是定义其实例将包含的方法。
多态多态指的是能够同样地对待不同类型和类的对象即无需知道对象属于哪个类就可调用其方法。
封装对象可能隐藏封装其内部状态。在有些语言中这意味着对象的状态属性只能通过其方法来访问。在Python中所有的属性都是公有的但直接访问对象的状态时程序员应谨慎行事因为这可能在不经意间导致状态不一致。
继承一个类可以是一个或多个类的子类在这种情况下子类将继承超类的所有方法。你可指定多个超类通过这样做可组合正交独立且不相关的功能。为此一种常见的做法是使用一个核心超类以及一个或多个混合超类。
接口和内省一般而言你无需过于深入地研究对象而只依赖于多态来调用所需的方法。然而如果要确定对象包含哪些方法或属性有一些函数可供你用来完成这种工作。
抽象基类使用模块abc可创建抽象基类。抽象基类用于指定子类必须提供哪些功能却不实现这些功能。
面向对象设计关于该如何进行面向对象设计以及是否该采用面向对象设计有很多不同的观点。无论你持什么样的观点都必须深入理解问题进而创建出易于理解的设计。