设为首页 收藏本站
查看: 546|回复: 0

[经验分享] Python基础(面向对象之类成员与修饰符)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-14 10:43:38 | 显示全部楼层 |阅读模式
本篇将介绍Python 类的成员、类成员修饰符、类的特殊成员。

类的成员可以分为三大类:字段、方法、属性
1、字段:
    也可理解为变量,分为:
        普通字段:保存在对象中,访问时通过“对象.字段名”访问。
        静态字段:保存在类中,访问时通过“类.字段名”访问。
    例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Person(object):      #继承object类说明是一个新式类
    country = 'China'       #静态字段
    def __init__(self,name):
        print 'Person build self.name'
        self.name = name    #普通字段
     
p1 = Person('lily')
print p1.name           #对象.字段访问普通字段
print Person.country      #类.字段访问静态字段

#执行结果:
Person build self.name
lily
China




2、方法:
    也可理解为函数,分为:
        普通方法:由对象调用,至少有一个self参数,必须先创建对象才能执行,执行方式为:对象.方法
        静态方法:由类调用,参数任意,定义方式是在方法上加一个staticmethod装饰器,其实就是通过面向对象的方式来定义函数。执行方式为:类.方法
        类方法:由类调用,至少有一个cls参数,定义方式是在方法上加一个classmethod装饰器。执行方式为:类.方法
    例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Person(object):
    country = 'China'
    def __init__(self,name):
        print 'Person build self.name'
        self.name = name
         
    def say(self):             #定义普通方法,至少有一个self参数
        print 'Normal say: %s'%self.name
         
    @staticmethod
    def static_say(name):         #定义静态方法,参数任意
        print 'Static say: %s'%name
         
    @classmethod
    def class_say(cls,name):      #定义类方法,至少有一个cls参数
        print 'Class say: %s'%name
         
#调用普通方法
p1 = Person('Lily')
p1.say()

#调用静态方法
Person.static_say('Lucy')

#调用类方法
Person.class_say('Lilei')

#执行结果
Person build self.name
Normal say: Lily
Static say: Lucy
Class say: Lilei




3、属性:
    作用就是把普通方法伪装成字段,定义方式为在普通方法上加一个property装饰器,仅有一个self参数,调用时无须括号。
    例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Person(object):
    country = 'China'
    def __init__(self,name):
        print 'Person build self.name'
        self.name = name
         
    def say1(self):                   #普通方法
        print 'Say1: %s'%self.name
         
    @property
    def say2(self):                   #定义属性
        return 'Say2: %s'%self.name
         
p1 = Person('Lily')
p1.say1()           #普通方法调用方式
ret = p1.say2        #属性调用方式
print ret

#运行结果:
Person build self.name
Say1: Lily
Say2: Lily



类成员修饰符
    对每一个类的成员而言都有两种形式:公有成员、私有成员
        公有成员:任何地方都能访问
        私有成员:只有在类的内部才能访问,定义方式为命名时,前两个字符为下划线,如 "__test"
    例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Person(object):
    country = 'China'        #静态字段,属于公有成员
    __planet = 'Earth'       #静态字段,属于私有成员
    def __init__(self,name):
        print 'Person build self.name'
        self.name = name
         
    def say(self):
        print 'The planet is %s'%Person.__planet    #在类的内部访问私有静态字段
         
p1 = Person('Nothing')
p1.say()
print p1.country            #访问公有静态字段
print p1.__planet           #访问私有静态字段

#执行结果:
Person build self.name
The planet is Earth         #在类的内部可以访问
    print p1.__planet
China                   #外部可以访问公有静态字段
AttributeError: 'Person' object has no attribute '__planet'    #外部无法访问私有静态字段




类的特殊成员(详细用法例子后期补上):
__doc__       表示类的描述信息
__module__     表示当前操作的对象在那个模块
__class__      表示当前操作的对象的类是什么
__init__       构造方法,通过类创建对象时,自动触发执行
__call__       对象后面加括号,触发执行。
__dict__       类或对象中的所有成员
__str__       如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-150896-1-1.html 上篇帖子: python内置模块 下篇帖子: python 读取文件指定某行
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表