自学python实例_类的方法属性名字的规则

1.类中方法属性中的规范形式

  • xx : 公有变量
  • _x : 开头单下划线, 代表私有化的属性和方法,不能通过from xx import *导入, 都是子类和对象可以访问
  • __x : 开头双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(因为外部在使用这个的时候,会吧名字重整所以访问不到)
  • __xx__ : 双前后下划线,用户名字空间的魔法对象或属性,  不要自己定义这样的名字
  • xx_: 单后置下划线,用于避免与Python关键词的冲突

下面用一段函数来说明:

class Father(object):
    def __init__(self, name, age, gender):
        # 公有变量, _x私有化属性, __xx
        # __xx__前面说了,是类中原有的魔法方法所有不要自己定义, 因此也不用说明
        self.name = name
        self._age = age
        self.__gender = gender

    def father_who(self):
        print(self.name, self._age, self.__gender)

    def _who(self):
        print('age is ', self._age)

    def __gender(self):
        print('gender is %s' %self.__gender)

wang = Father('laowang', '20', 'man')
wang.father_who()
print('=' *20)
wang._who()
wang.__gender()

然后, 我们执行一下,看看结果

laowang 20 man
====================
age is  20
Traceback (most recent call last):
  File "/home/python/Desktop/ceishi/main.py", line 22, in <module>
    wang.__gender()
AttributeError: 'father' object has no attribute '__gender'

Process finished with exit code 1

可以证明开始给出的,:

_age对象是可以访问的

__gender为私有化属性,外部不能访问

下面,我们测试一下,__gender__能不能通过子类访问

class Father(object):
    def __init__(self, name, age, gender):
        self.name = name
        self._age = age
        self.__gender = gender

    def father_who(self):
        print(self.name, self._age, self.__gender)

    def _who(self):
        print('age is ', self._age)

    def __gender(self):
        print('gender is %s' %self.__gender)

# 新增加的一个子类去继承上面的父类
class Children(Father):
    def set(self, name, age, gender):
        self.name = name
        self._age = age
        self.__gender = gender

    def children_who(self):
        print(self.name, self._age, self.__gender)

    def _who(self):
        print('age is ', self._age)

    def __gender(self):
        print('gender is %s' % self.__gender)


wang2 = Children('xiaowang', '15', 'man')
wang2.father_who()
wang2._who()
wang2.__gender()

我们看一下结果:

xiaowang 15 man
age is  15
Traceback (most recent call last):
  File "/home/python/Desktop/ceishi/main.py", line 38, in <module>
    wang2.__gender()
AttributeError: 'Children' object has no attribute '__gender'

2. 总结

  1. 开头双下划线 __xx的, 只能自己使用. 即子类不能继承, 对象不能访问

  2. 在子类中,向__xx赋值, 会在子类中创建一个相同名字的私有属性

  3. 名字使用xx是比较好的, 自己不要定义__xx__这样的名字

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值