您的位置:时时app平台注册网站 > 编程知识 > 通向与世长辞之路的python的笔记之类、方法、封

通向与世长辞之路的python的笔记之类、方法、封

2019-11-28 03:12

1)@property                 可读

;)

print(Student.mro())

自动从object继承

类的专有方法:

派生:衍生出新的品质

    第一个参数总是self

# 18

class People:
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

class Student(People):#继承People
    school = 'oldboy'
    #派生出新的属性
    def __init__(self,name,age,sex,group,year,mon,day):
        super().__init__(name,age,sex) #内置函数super()
        # == People.__init__(self,name,age,sex) 调用类的函数
        self.group = group
        self.birth = Date(year,mon,day)  #组合Date类,创建self.birth

class Date:
    def __init__(self,year,mon,day):
        self.year = year
        self.mon = mon
        self.day = day

    def __str__(self):
        return '%s-%s-%s'%(self.year,self.mon,self.day)


t = Student('mona',18,'female',9,1993,3,25)
print(t.birth)     #1993-3-25

                     实例正是发生实际的模型产物(成品卡塔 尔(英语:State of Qatar)

# 为p添加weight属性

class People:
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age 
        self.sex = sex

class Student(People):#继承People
    school = 'oldboy'
    #派生出新的属性
    def __init__(self,name,age,sex,group):
        super().__init__(name,age,sex) #内置函数super()
        # == People.__init__(self,name,age,sex) 调用类的函数
        self.group = group

t = Student('mona',18,'female',9)

不无的类都以元类(type)的实例

def__init__(self, name, age, gender):

后续是类与类之间的涉嫌,是豆蔻梢头种什么是什么样的涉及

 

类格局:定义类方法,要运用装饰器@classmethod,定义的率先个参数是能是类对象的引用,能够经过类依旧实例直用

_Self.__name  隐敝属性,顾客不恐怕直接访问该属性。其余提供接口供客商使用

下多少个务必有第叁个包装

方法

    类的称号空间:定义时就时有发生名称空间

1 class TextClass:
2        pass

print(p.__dict__)# {'age': 18, 'gender': '男', 'name': 'ice'}

class People:
    def __init__(self,name,age,sex,weight,height):
        self.name = name
        self.age = age
        self.sex = sex
        self.__height = height
        self.__weight = weight
    @property
    def BMI(self):
        return self.__height/(self.__weight**2)

s = People('mona',18,'female',1.60,50)
print(s.BMI)

【2】实例化步骤

print('离开Person的开始化')

2 class 类名:
3     '类的文档字符串'
4     类体
5 '''

#A为要翻看的类名

# 男

       Class.mro()查看类的存在延续循序

三种天性包装操作:

__add__加运算

实例化会做两件事:

1 模型的特征和能力打包在一起
2 模型的改变由模型自身完成
3 隐藏模型的细节,外界只能使用,不能改变

print(Person.__mro__)# (, )

OOP:面向对象编制程序;

  类被实例化才享有的性格

类的质量

#seetings.py 文件内容:IP= 10.10.10.10 
#                    port = 8080

class Mysql:
    def __init__(self,ip,port):
        self.ip = ip
        self.port = port

    @classmethod
    def from_conf(cls):
        import settings #导入模块
        obj = cls(settings.ip,settings.port)
        return obj

s = Mysql.from_conf()
print(s.ip,s.port)
# 10.10.10.10   8080

多态

__init__()方法是生机勃勃种卓殊的措施,被称为类的布局函数或初始化方法,当创制了那个类的实例时就能够调用该措施,与c 中布局函数相似。只需在自定义的类中重写__init__()方法就可以。

类和目的名称空间:

1、类的定义

__init__ 构造函数,在变化对象时调用

例如:同风姿罗曼蒂克类爆发的分裂的目的,对象能够共用该类的特性。便是多态

   备注:通常不提出在__init__()方法外定义,成立和初阶化实例,

__mul__乘运算

 OOSM :面向对象维护

   <1>类的中间调用:self.<方法名>(参数列表)

print(Person.__dict__)# {'__doc__': 'Person类', '__weakref__': , '__init__': , 'getName': , '__dict__': , '__module__': '__main__'}

凡世在类中定义的函数(未有被其余装饰器修饰卡塔尔国,都以绑定给指标的,即给指标用

#python2默以为卓越类,显式援用object类为新式类

__dict__ : 类的质量(包涵多少个字典,由类的多少属性组成卡塔尔

指标的数量属性能够增删查改

生龙活虎、面向对象进程的长处特征:

Python 类

三番三次:消亡代码重用的标题,减少代码冗余

类的文书档案查看:

;)

        新式类:广度优先

                  2)setattr(obj_name,"属性名"卡塔 尔(英语:State of Qatar)       设置属性

类的办法

结缘:是何许有怎么着的涉及,也是为着减小重复代码

 【3】类的私有属性

classMyclass:

语法:__开班的个性,在概念阶段爆发变形,__属性   ====> _类名__属性

 【3】布局方法    ’__init__()'      开端化实例

print(Person.__doc__)# Person类

类(Class):

将艺术包装成属性,以走避相关兑现:1卡塔 尔(阿拉伯语:قطر‎调控属性的品类和界定   2卡塔尔设想属性由别的属性管理后得来

类定义语法格式如下:

class People:
    def __init__(self,name):
        self.name = name
    def bar(self):
        print('--->',self.name)

卷入发生设想包装

__sub__减运算

@property  类装饰器  把被点缀的函数伪装成一个数码属性 

1 一个模型可以由其他模型组成

在python3中,全数类最顶层父类都以object类,与java肖似,若是定义类的时候从不写出父类,则object类正是其直接父类。

父类限定:

继承

;)

    子类完毕的措施必需跟父类的措施名字如出黄金时代辙 

【4】类的优秀措施

python类与c 类相通,提供了类的包装,世袭、多三回九转,布局函数、析构函数。

绑定方法:绑定给哪个人就是给哪个人用的

【2】特征属性,是具有本身包括或领会的模子

p.weight='70kg'

OOD:面向对象设计;

卓越类世袭为深度优先

.

#[<class '__main__.Student'>, <class '__main__.People'>, <class 'object'>]

1 def  Foo(self,a):
2       self.a=a
3       print(self.a)

delattr(obj, name) : 删除属性

Super().talk   世袭用父类的习性,并增添

>>>help(A)

.

class Student:
    school = 'oldboy'
    def __init__(self,name,age):
        self.name = name
        self.age = age

    # 控制打印对象名时显示的信息,必须有return 返回值
    def __str__(self):
        return self.name

    # 程序执行完后,对象已经在内存中清除完后,自动运行,一般写些关闭其他程序的操作
    def __del__(self):
        #做些与这个对象有关的清理操作
        print('===========>')

    #模拟与列表操作,查看值
    def __getitem__(self, item):
        return getattr(self,item)

    #修改
    def __setitem__(self, key, value):
        # setattr(self,key,value)
        self.__dict__[key] = value
    #删除
    def __delitem__(self, key):
        delattr(self,key)
1 符合自然界分类规律
2 快速实现代码重用
3 符合现实世界中事物的特征

__len__赢得长度

对象自己并未函数属性,不过足以采访类的--对象的绑定方法。对象里通用的数码和函数是援用类的称呼空间

2、类的性状,工夫,描述

self.gender=gender

绑定类的法子:

【5】属性访谈的特殊措施(反射卡塔 尔(阿拉伯语:قطر‎

在类地内部,使用def关键字可以为类定义一个艺术,与日常函数定义不一样,类格局必得含有参数self,且为第多个参数。

抽象类:

   <2>类的外表调用:<实例名>.<方法名>(参数列表)

self.age=age

尚未世襲object的类都称得上杰出类

 

Myclass.foo2()#从来能够调用

面向对象内置方法:如:__str__

 

self.gender=gender

非绑定方法:staticmethod

!!!!!

静态方法:定义静态方法使用装饰器@staticmethod,未有暗中同意的必得参数,通过类和实例间接调用

非绑定方法正是贰个函数,不必要类,也没有必要对象

 1 In [54]: class text:
 2     ...:     a=4
 3     ...:     def __init__(self,b=4):
 4     ...:         self.b=b
 5     ...:         
 6 
 7 In [55]: c=text()
 8 
 9 In [56]: c.a
10 Out[56]: 4
11 
12 In [57]: c.b
13 Out[57]: 4
14 
15 In [58]: text.a
16 Out[58]: 4
17 
18 In [59]: text.b
19 ---------------------------------------------------------------------------
20 AttributeError                            Traceback (most recent call last)
21 <ipython-input-59-cc1e79bff36f> in <module>()
22 ----> 1 text.b
23 
24 AttributeError: type object 'text' has no attribute 'b'

__call__函数调用

OOT:面向对象测量试验;

 

__del__ 析构函数,释放对象时行使

类的用法:

3、类的实例化

__bases__ : 类的具有父类构成因素(包涵了以个由全部父类组成的元组卡塔 尔(英语:State of Qatar)

概念:在类中定义的,被classmethod装饰的函数是绑定到类的措施

【1】实例属性

self.age=age

继续是风度翩翩种创设类的法子,遗传父类全数的习性

  一般在'__init__'()方法中创制并实例化

26classPerson:

类的数据属性能够增加和删除查改

   (1)‘__new__()'方法成立实例

__cmp__相比运算

封装:

用来阻止和调整属性采访并得以重复使用

__name__: 类名

多态:同意气风发种东西的不一样形态

3)@<property-name>.delter    可删

.

import abc
class File(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def read(self):
        pass
    def write(self):
        pass
class Txt(File):
    #read & write 这两个函数必须要有
    def read(self):
        pass
    def write(self):
        pass

t = Txt()

比如未有定义,则动用持续自object类的‘__init__'方法

Python中的类提供了面向对象编制程序的具备功底效:类的接续机制允许五个基类,派生类能够覆盖基类中的任何方式,方法中得以调用基类中的同名方法。

面向对象的软件开垦:

5、类的特征描述

__div__除运算

1:先成立对象,赋值给p

 

__setitem__安分守己索引赋值

特征:自动把类当做第一个参数字传送入

 

Myclass.foo3()#并未有参数a.foo3()#结果foo3

反射:重假设指程序能够访谈、检查评定和退换它自己情形或作为的意气风发种才具(自省卡塔尔国

 【2】类方式的调用

也足以应用以下函数的措施来访谈属性:

   子类必供给有父类的形式

负有定义的为Myclass元类的子类

print('离开Person的开始化')

 

【6】属性的包装

class ClassName:

在python3中,全部类暗中认可世襲object类

    ‘__'起头的变量名加以标记,独有类对象自个儿能访谈。(内部得以完结时会自动改造变量名卡塔 尔(阿拉伯语:قطر‎

# ice

持续顺序:从下而上,从左至右

 

__pow__称方

import abc
class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def talk(self):
        pass
class People(Animal):
    def talk(self):
        print('say hello')
class Pig(Animal):
    def talk(self):
        print('哼哼哼')
class Dog(Animal):
    def talk(self):
        print('汪汪汪')
alex=People()
yuanhao=Pig()
wupeiqi=Dog()

# alex.talk()
# wupeiqi.talk()
# yuanhao.talk()

def talk(obj):
    obj.talk()

新式类世襲为广度优先

print(self.name)

特色:obj.bar(卡塔 尔(英语:State of Qatar)自动把obj当做第叁个参数字传送入,因为bar()中的管理逻辑就是要管理obj

    <1>在类钦赐义属性(定义类的时候卡塔 尔(阿拉伯语:قطر‎

print(p.age)# 18

用来叙述具备同样的品质和艺术的指标的成团。它定义了该集结中每一个对象所共有的习性和方法。

               经常不推荐类外定义和修正,改革能够独立定义方法

print(p.gender)

  • 实例化爆发对象
  • 属性引用:数据属性;函数属性

    class Chinese:

    country = ‘china’.    #数据属性
    
    def __init__(self,name,color,age):
        #初始化,但是一定不能有返回值
        if not isinstance(name,str):
            raise TypeError #挑起异常
    
        self.name = name
        self.color = color
        self.age = age
    

    def talk(self): #函数属性

        print('talk')
    
    def eat(self):
        print('eat')
    
    def sleep(self):
        print('sleep')
    

    p1 = Chinese('mona','pink',18) ===》 p1-对象

    !注意:相近类的不等实例具备不相同的属性值

21classPerson:

 

  直接动用即定义:self.<属性名>

类对象:成立一个类之后,能够通过类名访谈、更动其性格、方法

但凡世袭了object的类都称呼新式类(在python3中存有类都为新式类卡塔 尔(阿拉伯语:قطر‎

 【2】类属性

"Person类"

 

类也是一个目的,但是富有开创其自己实例的力量

__module__: 类定义所在的模块(类的全名是'__main__.className',假诺类位居叁个导入模块mymod中,那么className.__module__ 等于 mymod)

 

结构体系:

classMyclass:

        卓越类:深度优先

    ’__init__()'    早先化类的秘技            ’__doc__'    类的辨证文书档案

print(p.age)

2.把括号后的参数字传送给__init__履行起初化,__init__奉行开端化时,会给目的创立名称空间。对象自己唯有数据属性

    类属性使得相似类的区别实例具备雷同的变量

__getitem__坚守索引获取值

OOA::面向对象分析;

    >>援用方法:类名.属性

__repr__ 打印,转换

继承:

1 前面定义了TestClass类
2 接下来实例化
3 A=TestClass()

;)

对象的性质,优先从友好的__dict__字典里找,要是和煦的字典里不曾,访谈类里的,假如类里也尚无,报错。本人定义的习性对此外引用了类的相仿属性未有影响

>>>Test = type("Test",(),{'age':13,'name':"wangbo"})

析构函数 __del__ ,__del__在目的灭亡的时候被调用,当对象不再被应用时,__del__措施运转:

目的是类的实例。
对象:通过类定义的数据布局实例。对象包罗八个数据成员(类变量和实例变量)和艺术。 实例化:创设叁个类的实例,类的求实对象。 

__iter__(self)   定义迭代情势                 __next__(self)

实例方法:只好通超过实际例调用,实例方法第三个概念的参数只好是实例本人引用

 

Python面向对象编程(OOP卡塔 尔(英语:State of Qatar)

print(hasattr(p,'weight'))# True

class People:
    def __init__(self,name):
        self.name = name

    def bar(self):
        print('--->',self.name)

    @staticmethod
    def calculate(x,y):
        return x y

s = People('mona')
print(s.calculate(2,8))   #10

6、类的不二等秘书诀

print(self.name)

 

2)@<property-name>.setter   可写

@classmethod#类装饰器deffoo2(cls):print(id(cls),'foo2')#类对象,直接能够调用,没有必要实例化print(id(Myclass),'yy')

    对象的称呼空间:实例化时发出对象的称谓空间

同名的类属性与实例属性,

p=Person('ice',18,'男')

本性调用:Chinese.name == Chinese.__dict__[‘country’]

          实例化步骤:1、‘__new__()' 定义新的实例      2、’__init__' 初步化实例

p.getName()

class People:
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

s = People('mona',18,'female')
print(hasattr(s,'name'))         判断是否是对象或类的属性
print(getattr(s,'name'))         对属性取值
setattr(s,'group','group9')      添加或更改属性
print(getattr(s,'group'))
delattr(s,'group')              删除属性
print(s.__dict__)

'''True
mona
group9
{'name': 'mona', 'age': 18, 'sex': 'female'}'''

【1】本事==>体未来章程上,类具备能动性

p=Person('ice',18,'男')

4、增加类的验证

对象能够分包自由数量和等级次序的数据。

【6】自定义元类

setattr(obj,name,value) : 设置三个性能。纵然属性子虚乌有,会创设叁个新属性

>>>>>>>>>>>>>>未完待续2018-03-04<<<<<<<<<<<<<<<

__doc__ :类的文书档案字符串

“”“
     docstring
                   ”“”

defgetName(self):

1 子类可以继承父类的特征与能力
2 还可以通过自定义来修改其特征与能力
3 鸭子模型:
4          只要具有使用者的属性或能力便可以使用
5          |==>其他语言需要通过接口来实现
6                 不同类,相同方法
7                  相同类,不同方法

classMyclass:deffoo(self):print(id(self),'foo')对象的地址#结果地址同样

 

Python内置类属性

2卡塔 尔(英语:State of Qatar)以<实例名>.属性名   援引时一定要援引实例属性

print(p.name)

假若定义了,则从概念的'__init__'带头接纳定义了的(正是艺术的重载卡塔尔国

self.name=name

在python3中私下认可世襲object父类

print('步入Person的初叶化')

>>>>>>>>>>>>> 更新2018-03-08<<<<<<<<<<<<<<<<<<<<

;)

二、类的切切实实贯彻和特色

# Person实例对象

>>>A.__doc__

print(p.name)# ice

封装

实例对象:类实例化后,能够行使其属性,能够动态的为实例对象增多属性(相似javascript)而不影响类对象。

在类名的下黄金时代行用三引号标出

print(hasattr(p,'weight'))# False

#python3暗中同意为新式类,不用显式引用object类

print(p.gender)# 男

指标:对其创立的类进行预管理

getattr(obj, name[, default]) : 访问对象的习性

__len__      __getitem__(self,key)                  __setitem__(self,key,value)          __delitem__(self,key)

__mod__求余运算

继承type类

print(Person.__bases__)# (,)

那正是类的证实文书档案

def__init__(self, name, age, gender):

将促成特殊公约格局额类

能够使用点(.)来访问对象的性质

1卡塔 尔(英语:State of Qatar)以<类名>.属性名   援引时只好引用类属性

defgetName(self):

    <2>在类外定义属性(在实例化今后卡塔尔国

print(Person.__module__)# __main__

 1 协议方法:
 2 __get__( )
 3 __set__( )
 4 __delete__( )
 5 分类:
 6 数据描述符(实现全部协的名法了
 7 非数据描述符( 实现部各十协议方法)
 8 说明: 所有关成员正数都是非海据描达符
 9 描述符必须作为另一个类的类属性,
10 
11 同名的实创剧性和非数推描述条(以方法为例
12 优先级
13 def pr():
14         print('..............')
15 >>>t.pr=10
16 >>>t.pr
17 >>>10
18 >>>del  t.pr
19 >>>t.pr
20 
21 
22 注意,只能在新成类中使用
23 _call__()让类的实例如函数一样可调用
24 类的继承与重载
25 继承的特点:
26 减少代码和灵话定到新类
27 子类具有父类的属性和方法
28 子类不能细继承父类的手有剧性3 法
29 子类可以添加后的方说
30 子类可以修改又类的乡法

# 进入Person的伊始化

                  3)getattr(obj_name,"属性名"            取属性

print(getattr(p,'name'))# ice

【5】元类:类的创制和首长

print('步向Person的开首化')

   (2)’__init__()'方法开端化实例

@staticmethod#静态方法deffoo3():print('foo3')

类可以把它看做函数的参数字传送送

hasattr(obj,name) : 检查是还是不是留存壹特品质

【4】深刻类的本性

self.name=name

【7】描述符

# 离开Person的伊始化

    ‘__dict__'    实例属性和值                 ’__module__'     类所在的模块

类定义

【7】类的特殊方式

print(Person.__name__)# Person

在行使自定义元类的时候:__metaclass__ =Myclass  #钦命元类

# ice

布局迭代器

【1】与类的涉嫌:定义类正是燃膏继晷模型(就好像印章,模子卡塔尔

【1】类方式定义

    ‘__base__'  父类

工具函数:1卡塔 尔(阿拉伯语:قطر‎hasatter(obj_name,"属性名")      测量检验是还是不是具有类的品质

组合

步骤:1)定义‘__init__'方法

    相仿面向进度中的函数定义方法

本文由时时app平台注册网站发布于编程知识,转载请注明出处:通向与世长辞之路的python的笔记之类、方法、封

关键词: