Python 大仙说:我的 Class 是什么东西?这个啦,那个啦,(⊙o⊙)…绝对是好东西,结束。你看着办吧。

0. Python 介绍班:class

😆:Python 介绍 class 班是上什么课?
👸:是不是象 Java 那样的 Object 物体吗?还是 Bean 豆豆?我脸上有没有长痘痘?
👦: 还是象 Kotlin,加了 资料类的 data class?

Python(🐍吐着sss) :都是,我的喜好是 自由发挥。class 是 particular type of object 特定对象。可以是资料,可以是方程,可以两者都是。咦?怎么都跑了,本大仙形象那么差吗?


👩‍🏫1. Class:上课啦!

我用的是 PyCharm。加个 example project 例子项目。
开头,它自己就会加个 main.py
main
如果它问你要 interpreter 翻译?你就指一个给它呗。

这是 class

# example
class Basic:
    """basic class 基础班"""
    variable = 123

    def show(self):  
        return "This is a basic class -- 这是基础班。"

然后在 main 里面🏃🏻跑啊:

# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    c = Basic()
    classTitle = c.show()
    print(classTitle)

意思:如果是本尊, 干这些活。结果:

D:\kivy\kivy_venv\Scripts\python.exe D:/pycode/example/main.py
This is a basic class -- 这是基础班。

Process finished with exit code 0

🌟2. 启动方程

constructor,很多语言都用,启动用的。Python也不例外,它用的是
init

例子:

class Circle:
    def __init__(self, center, radius):
        self.center = center
        self.radius = radius

    def area(self):
        return pi * self.radius * self.radius

很简单。main:

    point = (20, 20)
    r = Circle(point, 15)
    print("Circle area: %d" % (r.area()))

答案 3.14x15x15 = 706.5:

Circle area: 706

看来 Integer 没有四舍五入。🤔玩玩,换小数点后两位

    print("Circle area: %.2f" % (r.area()))

出来:

Circle area: 706.86

浮数有四舍五入。


👪3. 父子关系

先写老爸:🐦

# 父母 class
class Bird:

    def __init__(self):
        print("启动:鸟")

    def whoisThis(self):
        print("鸟类")

生个企鹅:🐧

# 儿女 class
class Penguin(Bird):

    def __init__(self):
        # call super() function
        super().__init__()
        print("启动:企鹅")

    def whoisThis(self):
        print("Penguin 企鹅")

    def run(self):
        print("奔跑速度:一摇三摆")

    def swim(self):
        print("游泳:快速")

呵呵,咱接着生,这次产只鸡:🐣

# 儿女 class
class Chicken(Bird):

    def __init__(self):
        # call super() function
        super().__init__()
        print("启动:鸡")

    def whoisThis(self):
        print("Chicken 鸡")

    def run(self):
        print("奔跑速度:中速")

    def fly(self):
        print("飞行:超低空,高度十米内。")

🔑Main

    print('\n父子类 class:')
    daYa = Penguin()
    daYa.whoisThis()
    daYa.run()
    daYa.swim()

    print('\n下一种,父子类 class:')

    rock = Chicken()
    rock.whoisThis()
    rock.run()
    rock.fly()

🏇跑啦:

父子类 class:
启动:鸟
启动:企鹅
Penguin 企鹅
奔跑速度:一摇三摆
游泳:快速

下一种,父子类 class:
启动:鸟
启动:鸡
Chicken 鸡
奔跑速度:中速
飞行:超低空,高度十米内。

🦸‍♂️4. 父子的 Super 超人关系

🍝加料老爸:

# 父母 class
class Bird:

    def __init__(self, birdName):
        self.birdName = birdName
        print("启动:鸟. 名称: ", birdName)

    ...

    def walk(self, birdName):
        print(self.birdName, " 能够用双足行走。")

🦸超级企鹅:🐧

# 儿女 class
class Penguin(Bird):

    def __init__(self):
        # call super() function
        super().__init__('企鹅')
        print("启动:企鹅")

    ...

🦸超级鸡: 🐔

# 儿女 class
class Chicken(Bird):

    def __init__(self):
        # call super() function
        super().__init__('鸡')
        print("启动:鸡")

    ...

🔑Main

    print('\n父子类 class:')
    daYa = Penguin()
    daYa.whoisThis()
    daYa.run()
    daYa.swim()
    daYa.walk()

    print('\n下一种,父子类 class:')

    rock = Chicken()
    rock.whoisThis()
    rock.run()
    rock.fly()
    rock.walk()

🏇跑啦:

父子类 class:
启动:鸟. 名称:  企鹅
启动:企鹅
Penguin 企鹅
奔跑速度:一摇三摆
游泳:快速
企鹅  能够用双足行走。

下一种,父子类 class:
启动:鸟. 名称:  鸡
启动:鸡
Chicken 鸡
奔跑速度:中速
飞行:超低空,高度十米内。
鸡  能够用双足行走。

总的来说,有点像轮回关系。


💃5. class 说: 我自由啦!

😍加个自由 class

class Person():
    pass

😲:就这样?
😎:就是这个样。

《✌️》 加变量

    print('\n自由 class 课堂戏剧:')
    lisa = Person()
    # 加个变量名称: key
    first_key = '名称'
    first_val = '丽莎'

    last_key = '姓氏'
    last_val = '蒙你'

    # 组成 lisa 这个人
    setattr(lisa, first_key, first_val)
    setattr(lisa, last_key, last_val)
    # 直接打
    setattr(lisa, 'age', 23)

《💡》使用方法:getattr 或 用点

    name = getattr(lisa, last_key) + getattr(lisa, first_key)
    print('主角名称: ', name)
    print(f'新生: 你好, {lisa.名称}小姐!你多大了?')
    print(f'{lisa.名称}: 我今年 {lisa.age}。')
    print('新生:青春少女喔!可不可以问问,贵姓哪?')
    print(f'{lisa.名称}: 姓{lisa.姓氏}喔。')
    print('新生:是嘛,这个姓氏真少见!')

《🎭》 输出:

自由 class 课堂戏剧:
主角名称:  蒙你丽莎
新生: 你好, 丽莎小姐!你多大了?
丽莎: 我今年 23。
新生:青春少女喔!可不可以问问,贵姓哪?
丽莎: 姓蒙你喔。
新生:是嘛,这个姓氏真少见!

💃5. class 说: 我要加帮手!

方程可以外挂吗?
👌🏻 : 没问题!加个 patch 方程

{✔️} 狠 get 外挂

def patch(mClass):
    # 外挂
    def skill(self, x):
        return f'我的特殊技能是: {x}'
    mClass.skill = skill.__get__(mClass)

用 “__ get __” 增加 skill 方程。

{✔️} 使用外挂

    print('新生:你有什么爱好吗!')
    patch(lisa)
    print(f'{lisa.名称}: {lisa.skill("爬树")}')

{🎭} 输出:

新生:你有什么爱好吗!
丽莎: 我的特殊技能是: 爬树

🍖6. 摘要班: Abstract Class

😎:秘书啊,按这个摘要加班,必须完成任务。
👩‍🦱 :是, 老板!

什么是 Abstract Class?就是一种 Class, 包括固定式方程的家伙。这个死皮赖脸的方程一定是自个产生的,非外来户。还有这寄生虫🐛穷啊,没资料,你要在新儿子那里给这家伙加挂。

Abstract 就是 ABC:

老妈的 class:

# 父母 class:纸张
class Paper(ABC):
    def __init__(self, value):
        self.roll = value
        super().__init__()

    @abstractmethod
    def 用途(self):
        pass

    @abstractmethod
    def 价钱(self):
        pass

加两个儿子和主程序:

# 儿女 class: 干湿两用纸
class Towel(Paper, ABC):
    def 用途(self):
        return '吸水能力:超强!'


# 儿女 class:厕纸
class BathTissue(Paper, ABC):
    def 用途(self):
        return '水解能力: 快速!'

    def 价钱(self):
        return '¥20 per 12 卷.'

一个儿子少了价钱。
Main


    print(f'干湿两用纸 是 {towel.roll} / 卷. '
          f'\n\t用途: {towel.用途()}')
    print(f'厕纸 是 {tissue.roll} / 卷. '
          f'\n\t用途: {tissue.用途()}'
          f'\n\t价钱: {tissue.价钱()}')

{🎭} 输出:Error

Traceback (most recent call last):
  File "D:/pycode/example/main.py", line 169, in <module>
    towel = Towel(100)
TypeError: Can't instantiate abstract class Towel with abstract methods 价钱

瞧,它说找不到 价钱 这个方程,无法运作。
你得非加上去不可,这就是 abstract class 的价值: 我要的,你就 必须 给我安上去。
来,让我们补一补:

👱‍♂️:爸,我要人参,鹿茸,冬成夏草。
👨:吃蒙了你!小孩子不能吃这些东西,会死人的。乖儿子,我把冬成夏草换成虫草花,煲汤给你喝啊。
🐍:SSS,两位,这里不是饮食节目。上隔壁去。
👱‍♂️👨:啊…

# 儿女 class: 干湿两用纸
class Towel(Paper, ABC):
    def 用途(self):
        return '吸水能力:超强!'

    def 价钱(self):
        return '¥60 per 12 卷.'

Main:

    print(f'干湿两用纸 是 {towel.roll} / 卷. '
          f'\n\t用途: {towel.用途()}'
          f'\n\t价钱: {towel.价钱()}')
    print(f'厕纸 是 {tissue.roll} / 卷. '
          f'\n\t用途: {tissue.用途()}'
          f'\n\t价钱: {tissue.价钱()}')

{🎭} 输出:

干湿两用纸 是 100 / 卷. 
	用途: 吸水能力:超强!
	价钱: ¥60 per 12 卷.
厕纸 是 150 / 卷. 
	用途: 水解能力: 快速!
	价钱: ¥20 per 12 卷.

👩‍🦱 :恭喜你,老板!摘要成功了!
😎:嗯,不错不错!

🥳:恭喜你,毕业了!哔哔…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值