Python 类学习的一些Tips
Posted foe0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 类学习的一些Tips相关的知识,希望对你有一定的参考价值。
这里不详细介绍类,只总结一些小萌新在学习python 类时会有的一些疑点。
-
类的私有性
- 在python中,属性和方法的访问权限只有两种,公开的,和私有的。在给属性命名时用两个“__”下划线作为开头,就设置其为私有的了。
-
class Test: def __init__(self, foo): self.__foo = foo def __bar(self): print(self.__foo) print(‘__bar‘) def main(): test = Test(‘hello‘) # AttributeError: ‘Test‘ object has no attribute ‘__bar‘ test.__bar() # AttributeError: ‘Test‘ object has no attribute ‘__foo‘ print(test.__foo) if __name__ == "__main__": main()
可以看到,以上调用方法都会因为没有权限给返回错误
# AttributeError: ‘Test‘ object has no attribute ‘__bar‘
如果想要调用私有的属性,使用如下方式:
def main(): test = Test(‘hello‘) test._Test__bar() print(test._Test__foo)
- 在实际开发中,不建议设置私有属性,会导致子类无法访问,python这一点与java和C#不同,他们类中的属性(数据抽象)通常都是私有的,目的是保护数据;而其类中的方法(行为抽象)都是公开的。而python不从语法层面保护私有成员的私密性。其实这个设定是无意义的,因为只要知道调用私有属性的方法,仍然可以进行调用。
- python 里有一句这样的话,We are all consenting adults here.我们都是成年人。这种设定只是给使用者一个暗示,这是一个不应该直接访问的属性和方法。
- __bar 是私有的,__bar__不是私有的。
- 参考链接:https://blog.csdn.net/jackfrued/article/details/79521404
-
self是个什么东西嗯?
- 首先,python 要求在类方法中,至少要包含一个参数,但没有规定此参数名,故此将类方法的第一个参数名为self,这是一个约定俗成的习惯。
- self 参数可以理解为C++ 语言中的this指针。详细举例:我们可以针对一个类,创建多个对象,每个对象都有多个方法。当某一对象调用类方法时,该对象会把自己的引用(self 指针)作为第一个参数传给被调用方法,这样,就让python 解释器明白,这个时候操作的方法是哪个对象的。
- 执行以下这段代码
class Dog: def __init__(self): print(self,"在调用构造方法") # 定义一个jump()方法 def jump(self): print(self,"正在执行jump方法") # 定义一个run()方法,run()方法需要借助jump()方法 def run(self): print(self,"正在执行run方法") # 使用self参数引用调用run()方法的对象 self.jump() dog1 = Dog() dog1.run() dog2 = Dog() dog2.run()
- 查看self指针状态,可以看到两个对象的指针入口是不一样的。
- 将self作为返回值有什么效果?将self参数作为返回值,可以多次连续调用同一个方法,使代码更简洁。这里有一个理解例子
class ReturnSelf : def grow(self): if hasattr(self, ‘age‘): print(hasattr(self,‘age‘)) self.age += 1 else: self.age = 1 # return self返回调用该方法的对象 print(self.age) return self rs = ReturnSelf() # 可以连续调用同一个方法 rs.grow().grow().grow() print("rs的age属性值是:", rs.age)
返回值为
参考链接:http://c.biancheng.net/view/2266.html
-
def __init__():方法的含义
- __init__(),是一个特殊的类实例方法,也被称为构造方法,构造函数。
- 它在创建对象时,每次都会被python解释器自动调用。在python中,这种以 ‘__xx__‘表示的方法,都具有特殊的意义。
以上是关于Python 类学习的一些Tips的主要内容,如果未能解决你的问题,请参考以下文章