python中类的构成_Python类的构成元素

类的构成元素

公共属性:实例化时无需__init__方法绑定到对象,就可以直接使用;

普通属性:实例化时 需要__ini__方法绑定到对象之后,才可以直接使用;

私有属性:__sex 双下滑杠开头,需要在类里定义函数属性(方法),对象调用函数属性间接访问;

特性:使用@property装饰器的方法,特性就是类的特殊属性,特殊之处在于普通属性是变量赋值的形式存在,它是一段代码(函数)返回值,因此可以借助@property把函数属性,模拟成变量属性,统一了调用接口;

特性分类:

1、只读特性@property装饰的函数

2、@diaplay.setter 可修改的特性

3、@diaplay.deleter 可以删除特性

--------------------------------------------------------------------------------------------------------------------------------------

绑定方法:实例调用时,该函数属性的 第一个形参自动传入对象本身;

静态方法:@staticmethod装饰的函数,称之为静态方法,无论对象还是类调用他,都不会把自身当做其第一个参数传入;说白了就是在类里定义了一个普通函数;也可以称为解绑函数,给类使用;

类方法:类方法是给类用的,类在使用时会将类本身当做参数传给类方法的第一个参数,python为我们内置了函数classmethod来把类中的函数定义成类方法;1

类的特殊方法:

0、__init__ (类里定义__init__构造方法,对象实例化时,触发__init__构造方法 初始化属性给对象)

1、__setattr__ (类里定义了__setattr__方法,对象设置属性时,触发该特殊方法执行;)

2、__delattr__(类里定义了__delattr__方法,对象删除属性时,触发该特殊方法执行;)

3、__getattr___ (类里定义了__getattr__方法,对象找不到属性时,触发该特殊方法执行;)

4、__str__(在类里定义__str__特殊方法,print 打印由这个类实例化出来的对象时,就会显示__str__特殊方法return的结果)

5、__setitem__(对象以字典的形式,设置属性时就会触发 ____setitem__特殊方法的运行)

6、__getitem__(对象以字典的形式,获取属性时就会触发__getitem__特殊方法的运行)

7、__delitem__(对象以字典的形式,删除属性时就会触发__delitem__特殊方法的运行)

8、__slots__ (在类里定义__slots__ 特殊方法之后,所有对象实例化时 自己不会再创建名称空间__dict__而且只能使用 __slots__ = ['x','x1','x2']里定义的属性)

9、__iter__和__next__(有__iter__方法的对象可迭代对象,可迭代对象执行__iter__方法变成迭代器;迭代器调用__next__就可以取一个迭代器里值,这样就不依赖索引取值了。)

10、__doc__(定义类的描述信息)

11、__del__(析构方法,当对象在内存中被释放时,自动触发执行。无需Python解释器回收垃圾;)

12、__enter__和__exit__(实现上下文管理协议 with open('a.txt','m') as f)

13、__call__(在类里定义了__call__实例化出来的对象,加上括号()就直接调用了__call__特殊方法里return的结果 )

14、__dict__(对象的属性和属性值)

ContractedBlock.gif

ExpandedBlockStart.gif

classBaseReponse:def __init__(self):

self.status=False

self.data=None

self.error=None

self.msg=Nonedefget_dic(self):#返回1个对象的属性信息

return self.__dict__response=BaseReponse()

response.error=1

print(response.get_dic())

__dict__应用

15、__bases__(查看当前类继承的父类)

对象属性

# 对象私有属性(对象不可以直接访问)

# 绑定方法:但凡定义到类里面的方法都是 绑定方法;对象调用绑定方法,会自动把自己作为绑定方法的第一个参数,传进去;

#静态方法:解除绑定关系,本质上就是个函数,类和对象直接调用,不用传自己;所也以对象 不用实例化 也可以使用类里的方法了;

# 对象特性:property通过对象方法模拟出来的property(对象的特性 会 优先于对象属性被访问)

# 对象特性分为

#1.只读特性 2.可修改特性 3、可删除的特性

#classPeople():

# def __init__(self,Name,Sex):

# self.name=Name #self.name是对象实例时,调用__init__方法时,初始化给对象的属性;

# self.__sex=Sex #但凡属性有__(双下划线标识)就意味着着,这是初始化给对象的私有属性,对象不能直接访问;

# def diaplay(self): #如何访问私有属性呢?

#return self.__sex # 1、通过在类里 添加方法,对象通过这个借口访问;

#

# p=People('马腾飞','男')

# print(p.diaplay())

#

#classPeople():

# def __init__(self, Name, Sex):

# self.name=Name

# self.__sex=Sex

# @property #2、通过类类内部的方法访问__sex还需要加括号,于是在此基础上,有了 @property装饰器。

# def diaplay(self): #@property: 通过装饰类的方法,给对象模拟出一个只读属性;就是负责把一个方法变成属性调用的:

#returnself.__sex

# p1=People('黄蓉','男')

# p1.diaplay #这样通过 diaplay方法 模拟出来的diaplay属性 就可以,像访问普通属性一样的方法,访问私有属性了;

# print(p1.__dict__)

#

#

#classPeople():

# def __init__(self, Name, Sex):

# self.name=Name

# self.__sex=Sex

# #@property装饰器虽然解决了,私有属性 、方法的统一访问;模拟出了私有属性访问接口;

# @property # 但该 接口无法 修改,私有属性还是无法修改;

# def diaplay(self):

#returnself.__sex

# @diaplay.setter #于是在此基础上产生了@diaplay.setter 装饰器,可修修改 @property特性

# def diaplay(self,value):

# self.__sex=value #千万注意 @display_setter只是模拟出来的特殊属性,没有存储值得功能;所以要修改他的值一定要修改 他引用的真实值

#return#

# p2=People('黄蓉','男')

# print(p2.diaplay)

# p2.diaplay='male'# print(p2.diaplay)

#

#classPeople():

# def __init__(self, Name, Sex):

# self.name=Name

# self.__sex=Sex

# @property

# def diaplay(self):

#returnself.__sex

# @diaplay.setter

# def diaplay(self,value):

# self.__sex=value

#return# @diaplay.deleter #可删除 property 特性

# def diaplay(self):

# del self.__sex

#

# p3=People('黄蓉','男')

# print(p3.diaplay)

# del p3.diaplay

# print(p3.diaplay)

import time

#classDate:

# def __init__(self,Year,Month,Day):

# self.year=Year

# self.month=Month

# self.day=Day

# @staticmethod #@staticmethod,给类增加了一种新的实例化方式,直接调用类下面的方法,不用__init__

# def now(): #用Data.now的形式去产生对象,该实例用的就是当前的时间

# t=time.localtime()

# obj=(t.tm_year,t.tm_mon,t.tm_mday) #新建实例并且返回

#returnobj

#

# print(Date.now())

#

# d1=Date.now()

# print(id(d1))

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值