delattr:删除该对象钦赐的三个属性
a、继承
from math import pi
class Circular:
def __init__(self,radius):
self.radius=radius
def area(self):
return self.radius **2 * pi
def perimeter(self):
return 2 * self.radius * pi
circu=Circular(10)
print(circu.area())
print(circu.perimeter())
b、而类有三种性子:静态属性和动态属性
a、优点:化解程序的扩充性,对某八个对象单独改正,会立马反应到方方面面种类中
5、实例化:类——>对象的进程
2、反射有八种办法:
b、封装使用
b、封装
多态指的是:意气风发类玩意儿有二种境况
__new__
class A:
def __init__(self): #有一个方法在帮你创造self
print('in init function')
self.x=1
def __new__(cls, *args, **kwargs):
print('in init funct')
return object.__new__(A,*args,**kwargs)
a=A()
f、__str__和__repr__改动目的的字符串呈现
class Foo:
2 def __init__(self,name):
3 self.name = name
4 def __repr__(self):
5 return 'obj in str' #这里只能是return
6 # def __str__(self):
7 # return '%s obj in str'%self.name
8 f = Foo('egon')
9 print(f) #优先执行__str__里面的内容
10 # 那么你是不是据地__repr__没用呢?
11 # print('%s'%f) #执行的是__str__里面的返回值
12 # print('%r'%f) #执行的是__repr__里面的返回值
13 print('==============')
14 print(str(f)) #当执行str(f)时,会去找__str__这个方法,如果找不到的时候,__repr__这个方法就给替补了
15 print(repr(f))
16 #1.当打印一个对象的时候,如果实现了__str__方法,打印__str__中的返回值
17 # 2.当__str__没有被实现的时候,就会调用__repr__方法
18 # 3.但是当你用字符串格式化的时候,%s和%r会分别调用__str__和__repr__方法
19 # 4.不管是在字符串格式化的时候还是在打印对象的时候,
20 # __repr__方法都可以作为__str__方法的替补,但反之则不行
21 # 5.用于友好的表示对象。如果__str__和__repr__方法你只能实现一个:先实现__repr__
__str__,__repr__
15、内置方法
a、静态方法和类格局
1、类措施:有个私下认可参数cls,况兼能够一向用类名去调用,能够与类属性人机联作(也正是能够使用类属性卡塔 尔(英语:State of Qatar)
2、静态方法:让类里的方法直接被类调用,就像正规调用函数肖似
b、类方式和静态方法的相通点:都能够平素被类调用,无需实例化
c、类情势和静态方法的不相同点:
类方法必须有三个cls参数表示那些类,能够应用类属性
静态方法没有需求参数
d、绑定方法:分为经常方法和类方式
普通方法:暗中同意有叁个self对象传进来,而且必须要被对象调用——-绑定到指标
类方法:暗中认可有多少个cls对象传进来,何况能够被类和对象(不推荐卡塔 尔(阿拉伯语:قطر调用—–绑定到类
e、非绑定方法:静态方法:未有设置私下认可参数,况兼可以被类和对象(不推荐卡塔 尔(阿拉伯语:قطر调用—–非绑定
16、接口类与抽象类
a、 接口类:(在抽象类的底蕴上卡塔尔国
在python中,默许是绝非接口类的
接口类不能够被实例化(假若实例化会报错卡塔尔
接口类中的方法不可能被实现
接口也就是做约束,让下面的类的方法都按照接口类中给出的方法去定义。如果接口类里面有的方法类里面没有,那么那个类就不能被实例化。(字面理解)
继承的第二种含义非常重要。它又叫“接口继承”。
接口继承实质上是要求“做出一个良好的抽象,这个抽象规定了一个兼容接口,使得外部调用者无需关心具体细节,可一视同仁的处理实现了特定接口的所有对象”——这在程序设计上,叫做归一化。
b、抽象类
在python中,默认是有的
父类的方法,子类必须实现
抽象类(父类)的方法可以被实现
抽象类和接口类的区别:接口类不能实现方法,抽象类可以实现方法里面的内容
抽象类和接口类的相同点:都是用来做约束的,都不能被实例化
抽象类和接口类的使用:
当几个子类的父类有相同的功能需要被实现的时候就用抽象类
当几个子类有相同的功能,但是实现各不相同的时候就用接口类
a、多如牛毛三个类就能够创造一个类的称谓空间,用来积攒类中定义的兼具名字,那个名字成为类的习性
b、把品质都隐蔽起来提供公共措施对其访谈
4、对象/实例:具体的某一个事物(隔壁阿花、楼下旺财卡塔尔
9、属性援用(类名.属性卡塔 尔(阿拉伯语:قطر
10、例化:类名加括号正是实例化,会活动触发__init__函数的周转,能够用它来为每个实例定制自身的个性
python2
class Dad: #经典类
class Dag(object) #新式类
python3
class Dad == class Dag(object) #新式类
class Foo(object):
pass
class Bar(Foo):
pass
issubclass(Bar, Foo)
class Person: #定义一个人类
role = 'person' #人的角色属性都是人
def walk(self): #人都可以走路,也就是有一个走路方法,也叫动态属性
print("person is walking...")
class 类名:
类属性 = None
def __init__(self,对象属性):
self.对象属性 = 对象属性
def 方法名(self):
pass
实例 = 类名(10)
实例.方法名()
1、面向进程
e、内置方法:item系列
d、内置方法:__del__
必要静心的是,就算回到的是指标的方法,再次来到出来的是指标的内部存款和储蓄器地址,假设急需周转那些措施,能够在末端增多生机勃勃对(卡塔 尔(英语:State of Qatar)
1、世襲的语法
a、内置方法:isinstance和issubclass
6、
在python中,用变量表示特征,用函数表示手艺,由此具备同等特征和技艺的后生可畏类东西就是‘类’,
创办二个指标/实例就能够创建叁个对象/实例的称号空间,贮存对象/实例的名字,称为对象/实例的属性
property是后生可畏种独特的天性,访谈它时会推行生机勃勃段作用(函数卡塔尔然后重回值
2、封装原则:
class 类名(父类名):
想在子类中实现调用父类的方法
在类内 ——super(子类名,self).方法名()
在类外面 ——super(子类名,对象名).方法名()
如果不指定继承的父类,默认继承object
子类可以使用父类的所有属性和方法
如果子类有自己的方法就执行自己的的
如果是子类没有的方法就执行父类的
如果子类父类都没有这个方法就报错
继承、抽象、派生
继承 是从大范围到小范围
抽象 小范围到大范围
派生 就是在父类的基础上又产生子类——派生类
父类里没有的 但子类有的 ——派生方法
派生属性
方法的重写
父类里有的方法,在子类里重新实现
列子:
组成指的是,在贰个类中以别的二个类的指标作为数据属性,称为类的组
类名
类名.类属性
类名.方法名
实例 = 类名(参数,参数) #实例就是对象
实例
实例.方法名()
实例.对象属性
实例增加属性
实例.新的属性名 = 1000
print(实例.新的属性名)
b:世襲基类的点子,并且做出自个儿的改换依然扩充(代码重用卡塔尔*** ***
3、 类:具有同样特征的风姿浪漫类东西(人、狗、大虫)
a:表明有些子类宽容于某基类,定义一个接口类Interface,接口类中定义
setattr:给指标的性能赋值,若属性不设有,先创立后赋值
getattr:获取对象的质量也许措施,假若存在则打字与印刷出来。hasattr和getattr配套使用
class Foo:
pass
class Son(Foo):
pass
s=Son()
print(isinstance(s,Son))
c、提升复用性
注:此措施平日不要定义,因为Python是一门高档语言,技士在运用时没有必要关注内部存款和储蓄器的分红和假释,因为此干活都以交给Python解释器来奉行,所以,析构函数的调用是由解释器在张开垃圾回笼时自动触发实施的。
7、对象是则是那后生可畏类东西中实际的多少个
2、面向对象
b、劣点:可控性差,不能够向面向进程的主次设计流水生产线式的能够很精准的预测难点的管理流程与结果,面向对象的次第豆蔻梢头旦初阶就有对象时期的并行化解难点。
a、优点:一点都不小的下挫了写程序的复杂度,只须要顺着施行的步骤,堆集代码就可以
** 了生龙活虎部分接口名(正是函数名卡塔尔国且从未达成接口的效果,子类继世襲口类,况且达成接口中的功效**
13、类命名空间与目的、实例的命名空间
isinstance(obj,cls)检查是还是不是obj是或不是是类 cls
的对象
a、在python中用双涂抹的初始的的办法降属性掩盖起来(设置个人的卡塔 尔(阿拉伯语:قطر
检查是否含有某属性---hasattr 返回布尔值
获取属性---getattr 没有就会报错
设置属性---setattr
删除属性---delattr
www.2979.com , 14、面向对象的三大特点
c、python面向对象中的反射:通过字符串的款式操作对象相关的属性,python中任何事物都以指标(都得以用反射卡塔尔
圆的周长与面积
8、类的两种意义:属性援引和实例化
1、
反射:能够用字符串的方法去访谈对象的性质,调用对象的法子(然则不可能去拜会方法卡塔尔国,python中全体皆对象,都得以利用反射。
c、多态:”多态指的是黄金年代类东西有各类模样(举个例子:老师.下课铃响了(卡塔 尔(英语:State of Qatar),学子.下课铃响了(),老师实践的是下班操作,学子进行的是放学操作,即便双方消息无差距于,不过进行的功效不一样卡塔尔
class Person: #定义一个人类
role = 'person' #人的角色属性都是人
def __init__(self,name):
self.name = name # 每一个角色都有自己的昵称;
def walk(self): #人都可以走路,也就是有一个走路方法
print("person is walking...")
print(Person.role) #查看人的role属性
print(Person.walk) #引用人的走路方法,注意,这里不是在调用
b、内置方法:issubclass(sub, super)检查sub类是或不是是
super 类的派生类金沙国际唯一官网网址 ,
class Person: #定义一个人类
role = 'person' #人的角色属性都是人
def walk(self): #人都可以走路,也就是有一个走路方法
print("person is walking...")
print(Person.role) #查看人的role属性
print(Person.walk) #引用人的走路方法,注意,这里不是在调用
a、将转移隔绝
class Animal: #父类 基类 超类
def __init__(self,name,life_value,aggr):
self.name = name
self.life_value = life_value
self.aggr = aggr
class Person(Animal): #子类 派生类
pass
class Dog(Animal): #子类 派生类
pass
egg = Person('egon',1000,50)
print(egg.name)
print(egg.aggr
面容对象的咬合用法:
3、私有变量和个人方法
2、世袭的两用:
11、
15、反射
self:在实例化时自动将对象/实例本身传给__init__的第一个参数,你也可以给他起个别的名字.
对象/实例只有一种作用:属性引用
class 类名:
def __init__(self,参数1,参数2):
self.对象的属性1 = 参数1
self.对象的属性2 = 参数2
def 方法名(self):pass
def 方法名2(self):pass
对象名 = 类名(1,2) #对象就是实例,代表一个具体的东西
#类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法
#括号里传参数,参数不需要传self,其他与init中的形参一一对应
#结果返回一个对象
对象名.对象的属性1 #查看对象的属性,直接用 对象名.属性名 即可
对象名.方法名() #调用类中的方法,直接用 对象名.方法名() 即可
dir(类) #返回类中的所有名字列表
isinstance(对象,类) #判断对象是否为类的实例
print(Person.__dict__) # 返回一个字典 key是属性名,value是属性值
print(Person.__module__) #person类所在的模块
print(Person.__name__,type(Person.__name__)) #字符串数据类型的类名
a、将不要求对外提供的剧情都掩藏起来
析构方法,当指标在内部存款和储蓄器中被保释时,自动触发实践。
class Foo:
def __del__(self):
print('fgs')
f=Foo()
print(123)
print(123)
del f
print(123)
print(123)
print(123)
1、优点:
12、关于self
b、劣点:生龙活虎套流水生产线大概流程即是来清除多个题目,代码正是牵一发而南京全身
python自带多态:
多态:同一类事物的多种状态
python里处处都是多态,只是我们一般发现不了
操作的时候不需要关心这个对象的数据类型,你只要用就行了
生龙活虎、面向对象
2、面向对象。
hasattr:hasattr(object,name卡塔 尔(英语:State of Qatar)判别三个目的是还是不是有name属性也许name方法。有就回到True,未有就重回False
property属性
d、进步安全性