Task 03 Python基础进阶:从函数到高级魔法方法(第二天)

  • Post author:
  • Post category:python




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 版权协议,转载请附上原文出处链接和本声明。