Task 03 – 从函数到高级魔法方法 – 类与对象
Python基础进阶:类与对象
4.3 类与对象 – python的魔法方法 – 公有和私有
解析
在 Python 中定义私有变量只需要在变量名或函数名前加上“__”两个下划线
那么这个函数或变量就会为私有的了。
【例子】类的私有方法实例
class Site:
def __init__(self, name, url):
self.name = name # public
self.__url = url # private
def who(self):
print('name : ', self.name)
print('url : ', self.__url)
def __foo(self): # 私有方法
print('这是私有方法')
def foo(self): # 公共方法
print('这是公共方法')
self.__foo()
x = Site('老马的程序人生', 'https://blog.csdn.net/LSGO_MYP')
x.who()
#name : 老马的程序人生
#url : https://blog.csdn.net/LSGO_MYP
x.foo()
#这是公共方法
#这是私有方法
x.__foo()
#AttributeError: 'Site' object has no attribute '__foo'
为什么x.__foo()会报错?要怎么改?
x._Site__foo() #这是私有方法
用 x._Site__foo() 就解决啦!
4.5 继承
解析
import random
class Fish:
def __init__(self):
self.x = random.randint(0, 10)
self.y = random.randint(0, 10)
def move(self):
self.x -= 1
print("我的位置", self.x, self.y)
class GoldFish(Fish): # 金鱼
pass
class Carp(Fish): # 鲤鱼
pass
class Salmon(Fish): # 三文鱼
pass
class Shark(Fish): # 鲨鱼
def __init__(self):
self.hungry = True
def eat(self):
if self.hungry:
print("吃货的梦想就是天天有得吃!")
self.hungry = False
else:
print("太撑了,吃不下了!")
self.hungry = True
g = GoldFish()
g.move() # 我的位置 9 4
s = Shark()
s.eat() # 吃货的梦想就是天天有得吃!
s.move()
#AttributeError: 'Shark' object has no attribute 'x'
~~划重点 ~~ !!!
pass的话就相当于没有重写父类的__init__方法;
原来的class Shark(Fish)是因为重写了__init__方法,
子类的构造方法把父类的构造方法覆盖了
所以没有self.x = random.randint(0, 10) ,也就报错说没有x
解决方法
调用未绑定的父类方法Fish.__
init
__(self)
class Shark(Fish): # 鲨鱼
def __init__(self):
Fish.__init__(self)
self.hungry = True
def eat(self):
if self.hungry:
print("吃货的梦想就是天天有得吃!")
self.hungry = False
else:
print("太撑了,吃不下了!")
self.hungry = True
使用super函数super().__
init
__()
class Shark(Fish): # 鲨鱼
def __init__(self):
super().__init__()
self.hungry = True
def eat(self):
if self.hungry:
print("吃货的梦想就是天天有得吃!")
self.hungry = False
else:
print("太撑了,吃不下了!")
self.hungry = True
END😁
望批评指正
如果认为对你学习有帮助
欢迎收藏❤帮我点个赞👍谢谢你哦❤
未经同意不准转载^ . ^
版权声明:本文为m0_37759382原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。