星相第一类的五大特点
PCB:提升流程的可靠性将特性和方式包装袋到类第一类中,在方式外部对特性展开操作方式,在类第一类的外部初始化方式,这种,无须重视方式外部的具体内容同时实现技术细节,进而隔绝了维数。在python中没独有的缩排用作特性的专有,假如该特性不期望在类第一类外部被出访,后面采用2个“_”。class Student:
def __init__(self,name,age):
self.name=name
self.__age=age#年纪不期望在类的外部被出访,因此在后面加了“__”
def show(self):
print(self.name,self.__age)
stu1=Student(张三,20)
stu1.show()
print(stu1.name)
#print(stu1.__age)#报错:Student object has no attribute __age
print(dir(stu1))
print(stu1._Student__age)
结果
—-
张三 20
张三
[_Student__age, __class__, __delattr__, __dict__, __dir__, __doc__, __eq__, __format__, __ge__, __getattribute__, __gt__, __hash__, __init__, __init_subclass__, __le__, __lt__, __module__, __ne__, __new__, __reduce__, __reduce_ex__, __repr__, __setattr__, __sizeof__, __str__, __subclasshook__, __weakref__, name, show]
20
继承:提升代码的复用性语法格式
class 子类类名(父类1,父类2…)
假如一个类没继承任何类,则默认继承objectpython支持多继承定义子类时,必须在其构造函数中初始化父类的构造函数class Person(object):
def __init__(self,name,age):
self.name=name
self.age=age
def info(self):
print(self.name,self.age)
class Student(Person):
def __init__(self,name,age,stu_no):
super().__init__(name,age)
self.stu_no=stu_no
class Teacher(Person):
def __init__(self,name,age,teacherofyear):
super().__init__(name,age)
self.teacherofyear=teacherofyear
stu1=Student(张三,20,1001)
teacher=Teacher(李四,34,10)
stu1.info()
teacher.info()
结果
—-
张三 20
李四 34
#多继承
class A:
pass
class B:
pass
class C(A,B):
pass
方式重写class Student(Person):
def __init__(self,name,age,stu_no):
super().__init__(name,age)
self.stu_no=stu_no
def info(self):#方式重写
super().info()
print(self.stu_no)
class Teacher(Person):
def __init__(self,name,age,teacherofyear):
super().__init__(name,age)
self.teacherofyear=teacherofyear
def info(self):#方式重写
super().info()
print(self.teacherofyear)
stu1=Student(张三,20,1001)
teacher=Teacher(李四,34,10)
stu1.info()
teacher.info()
结果
—-
张三 20
1001
李四 34
10
object类object类是所有类的父类,因此所有类都有object类的特性和方式内置函数dir()可以查看指定第一类所有特性class Student:
def __init__(self,name,age):
self.name=name
self.age=age
def __str__(self):#重写方式
return 我的名字是{0},今年{1}岁.format(self.name,self.age)
stu=Student(张三,30)
print(dir(stu))
print(stu)#默认初始化__str__这种的方式
结果
—-
[__class__, __delattr__, __dict__, __dir__, __doc__, __eq__, __format__, __ge__, __getattribute__, __gt__, __hash__, __init__, __init_subclass__, __le__, __lt__, __module__, __ne__, __new__, __reduce__, __reduce_ex__, __repr__, __setattr__, __sizeof__, __str__, __subclasshook__, __weakref__, age, name]
我的名字是张三,今年30岁
多态:提升流程的可扩展性和可维护性即便不知道引用的第一类到底是一个什么类型,仍然可以通过初始化这个变量方式,在运行过程中根据变量所引用第一类的类型,动态决定初始化哪个第一类中的方式。
静态语言和动态语言关于多态的区别静态语言同时实现多态的三个必要条件继承方式重写父类引用指向子类第一类动态语言的多态不重视第一类时什么类型,只重视第一类的行为。class Animal(object):
def eat(self):
print(动物会吃)
class Dog(Animal):
def eat(self):
print(狗吃骨头)
class Cat(Animal):
def eat(self):
print(猫吃鱼)
class Person:
def eat(self):
print(人吃五谷杂粮)
def fun(obj):
obj.eat()
fun(Cat())
fun(Dog())
fun(Animal())
fun(Person())
结果
—-
猫吃鱼
狗吃骨头
动物会吃
人吃五谷杂粮