金沙国际唯一官网-奥门金沙手机娱乐网址

热门关键词: 金沙国际唯一官网,奥门金沙手机娱乐网址
金沙国际唯一官网 > 关于编程 > python学习交流3群新开,1.1 重写一般方法

原标题:python学习交流3群新开,1.1 重写一般方法

浏览次数:94 时间:2019-10-17

python中的protected和private

python中用

_var ;变量名前二个下划线来定义,此变量为保卫安全成员protected,唯有类及其子类能够访谈。此变量不能够经过from XXX import xxx 导入

__var;变量名前三个下划线来定义,此变量为私有private,只同意类本人访谈,连子类都不得以访问。

 

class perent_class(object):
    def __init__(self,name,protected,private):
        self.name = name
        self._protected = protected
        self.__private = private

 

Linux and python学习交换1,2群已满.

Linux and python学习沟通3群新开,招待出席,一齐学习.qq 3群:563227894

不前进,不倒退,甘休的场所是一贯不的.

联机前进,与君共勉,

 

左近一回课(十月7日)

一、 类的重写

1.1 重写日常方法

class A:
    def hello(self):
        print('Hello,i am A.')
class B(A):
    pass
a = A()
b = B()
a.hello()
b.hello()

结果:

Hello,i am A.
Hello,i am A.

解释:

B类未有概念自身的hello方法,故当hello被调用时,原始消息就被打字与印刷出来了。

B类也足以重写那一个hello方法

class A:
    def hello(self):
        print('Hello,i am A.')
class B(A):
    def hello(self):  
        print('Hello,i am B.')
a = A()
b = B()
a.hello()
b.hello()

结果:

Hello,i am A.
Hello,i am B.

1.2 重写特殊的构造方法

1、调用未绑定的基类构造方法

class Bird:
    def __init__(self):
        self.hungry = True
    def eat(self):
        if self.hungry:
            print('Aaaah...')
            self.hungry = False
        else:
            print('No,thanks!')
class SongBird(Bird):
    def __init__(self):
            Bird.__init__(self)
            self.sound = 'Squawk!'
    def sing(self):
        print(self.sound)
b = SongBird()
b.sing()
b.eat()
b.eat()

结果:

Squawk!
Aaaah...
No,thanks!

2、使用super函数

class Bird():
    def __init__(self):
        self.hungry = True
    def eat(self):
        if self.hungry:
            print('Aaaah...')
            self.hungry = False
        else:
            print('No,thanks!')
class SongBird(Bird):
    def __init__(self):
        super(SongBird,self).__init__()
        self.sound = 'Squawk!'
    def sing(self):
        print(self.sound)
b = SongBird()
b.sing()
b.eat()
b.eat()

结果:

Squawk!
Aaaah...
No,thanks!

解释:

Python 第22中学定义类供给写上object,不然报错。

二、类的私家变量

在Python中得以经过在品质变量名前丰盛双下划线定义属性为私有质量

特殊变量命名

1、 _xx 以单下划线开首的意味的是protected类型的变量。即体贴品种只可以同意其本人与子类举办访谈。若当中变量标示,如: 当使用“from M import”时,不会将以多个下划线开始的目的引进 。

2、 __xx 双下划线的表示的是私家类型的变量。只好同意那些类自身进行访谈了,连子类也不得以用来命名一个类属性(类变量),调用时名字被转移(在类FooBar内部,__boo变成_FooBar__boo,如self._FooBar__boo)

3、 __xx__概念的是非常措施。客商调节的命名空间内的变量或是属性,如init , __import__大概file 。只有当文书档案有证实时利用,不要本人定义那类变量。 (正是说这一个是python内部定义的变量名)

在那地重申说一下私有变量,python暗许的分子函数和成员变量都以当面包车型大巴,未有像任何类似语言的public,private等注重字修饰.可是能够在变量前边加上四个下划线"_",那样的话函数或变量就成为私有的.那是python的个体变量轧压(那一个翻译好拗口),斯洛伐克共和国(The Slovak Republic)语是(private name mangling.) **气象正是当变量被标识为私有后,在变量的前端插入类名,再类名前增加三个下划线"_",即产生了_ClassName__变量名.**

Python内置类属性

__dict__ : 类的质量(包蕴贰个字典,由类的数额属性组成)

__doc__ :类的文书档案字符串

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

__bases__ : 类的具有父类构成要素(包含了贰个由全部父类组成的元组)

例子1:

class A(object):
    def __init__(self):
        self.__data = []  # 翻译成 self._A__data=[]

    def add(self, item):
        self.__data.append(item)  # 翻译成 self._A__data.append(item)

    def printData(self):
        print self.__data  # 翻译成 self._A__data


a = A()
a.add('hello')
a.add('python')
a.printData()
# print a.__data  #外界不能访问私有变量 AttributeError: 'A' object has no attribute '__data'
print a._A__data  # 通过这种方式,在外面也能够访问“私有”变量;这一点在调试中是比较有用的!

结果:

['hello', 'python']
['hello', 'python']

例子2:

class A():
    def __init__(self):
        self.__name = 'python'  # 私有变量,翻译成 self._A__name='python'

    def __say(self):  # 私有方法,翻译成 def _A__say(self)
        print self.__name  # 翻译成 self._A__name


a = A()
# print a.__name #访问私有属性,报错!AttributeError: A instance has no attribute '__name'
print a.__dict__  # 查询出实例a的属性的集合
print a._A__name  # 这样,就可以访问私有变量了
# a.__say()#调用私有方法,报错。AttributeError: A instance has no attribute '__say'
print dir(a)  # 获取实例的所有属性和方法
a._A__say()  # 这样,就可以调用私有方法了

结果:

{'_A__name': 'python'}
python
['_A__name', '_A__say', '__doc__', '__init__', '__module__']
python

本文由金沙国际唯一官网发布于关于编程,转载请注明出处:python学习交流3群新开,1.1 重写一般方法

关键词:

上一篇:没有了

下一篇:就像单CPU的种类中运维多个进程那样,正是那么