python中的类(二)
2018-06-18 01:49:07来源:未知 阅读 ()
python中的类(二)
六、类的成员
字段:普通字段,静态字段
eg:
class Province(): country=’中国’ #静态字段,保存在类中,执行时可以通过类或对象访问 def __init__(self,name): self.name=name #普通字段,保存在对象中,只能通过对象访问 print(Province.country) #中国,通过类访问 obj=Province(‘河南’) print (obj.name) #河南,通过对象访问 print(obj.country) #中国,通过对象访问
方法:普通方法,静态方法,类方法
应用场景:
普通方法:对象中需要保存一些值,执行某功能时,需要使用对象中的值
静态方法:不需要任何对象中的值
eg:
class Foo(): def f1(self): #普通方法,保存在类中,由对象调用,形参self指调用的对象 print(123) @staticmethod def f2(a1): #静态方法,self不是必须的形参,保存在类中,可以通过类直接调用 print(a1) @classmethod def f3(cls): #类方法,形参cls指当前类名,所以可以通过类访问 print
属性
属性实际是方法,只是在在调用时不像调用方法那样在方法名后加括号。
class Foo(): @propery #用于执行obj.f4 def f4(self): print (789) return 1 @f4.settr #用于执行obj.f4=123 def f4(self,val) print(val) @f4.deleter #用于执行del obj.f4 def f4(self): print(111) 调用: obj=Foo() #创建对象 r=obj.f4 #调用属性 print (r) #789 #1 obj.f4=123 #123 del obj.f4 #111
成员修饰符
类的成员分为共有成员和私有成员。共有成员可以直接访问,而私有成员不可以外部直接访问。
共有成员:
以前创建的成员均为共有成员。
私有成员:
在创建成员时,在成员名前添加两个下划线即可。私有成员虽然外部无法直接访问,但是可以在类的内部访问。父类中的私有成员,子类也不可直接使用。
class Person ( ): def __init__(self,name,age): self.name=name #共有成员 self.__age=age #私有成员 def show(): print ( self.__age) F=Person(‘tom’,18) F.show() #18,通过类内部访问 F.name #tom,通过外部访问
特殊成员
__call__
class Call: def __call__(self, *args, **kwargs): print (‘ok’) #调用方法一 F=Call() F() #执行__call__方法,输出ok #调用方法二 Call()() #执行__call__方法,输出ok
__str__
一般在print时使用。若不加此方法,print该类的对象时,显示的是该类的内存地址。
eg:
class F(): def __init__(self,n,a): self.name=n self.age=a def __str__(self): return self.name #调用 A=F(’tom’,18) print (A) #tom,执行时类似于print(str(A)),str(A)会自动调用F中的str方法,并获取其返回值
__del__(析构方法)
在该类的对象被销毁时,执行。
__getiterm__
通过索引取值。
eg:
class Person(): def __init__(self, name, age): self.name = name self.__age = age def __getitem__(self, item): return item+10 F=Person('tom',18) print (F[2]) #12,自动执行F对象类中__getitem__方法。
__setiterm__
通过索引赋值。
eg:
class Person(): def __init__(self, name, age): self.name = name self.__age = age def __setitem__(self, key, value): print (key,value) F=Person('tom',18) F[3]=222 #3 222,自动执行F对象类中__setitem__方法。
__iter__
如果类中有__iter__方法,则该对象时可迭代对象
对象.__iter__()的返回值是迭代器
for循环遇到可迭代对象,则自动执行对象.__iter__(),生成迭代器,进行for循环。
eg:
class Person(): def __init__(self, name, age): self.name = name self.__age = age def __iter__(self): return iter([11, 22, 33]) F=Person('tom',18) for i in F: print(i)
metaclass
class F1(type): def __init__(self,what,bases=None,dict=None): super(F1, self).__init__(what,bases,dict) print (1) def __call__(self): print (2) self.__new__(self) self.__init__(self) class S(object,metaclass=F1): def __new__(cls, *args, **kwargs): pass def __init__(self): print (3)
输出结果为:
1
2
3
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash