python学习第五天(1)

本文详细介绍了Python中类属性、实例方法、类方法、静态方法的概念及使用原则,并通过具体实例展示了如何利用这些特性来提高代码效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.类属性的定义

因为类是特殊的对象,所以也具有属性,也有方法)。定义类的方法:只需要使用赋值语句,定义类属性。常见用法用来记录这个类定义的对象的次数。

class Tool(object):
    count = 0
    def __init__(self,name):
        self.name = name
        Tool.count += 1
tol1 = Tool("futou")
tol2 = Tool("langtou")
print(Tool.count)

输出结果:

2

用Tool这个类创建了tol1和tol2两个对象。
属性获取机制:类名.属性名

2.类方法

语法:

@classmethod
def 类方法名(cls):
pass

实例

class Tool(object):
    count = 0
    @classmethod
    def show_tool_count(cls):
        print("对象数量%d"%cls.count)
    def __init__(self,name):
        self.name = name
        Tool.count += 1
tol1 = Tool("futou")
tol2 = Tool("langtou")
tol1.show_tool_count()

输出结果:

对象数量2

类方法与实例方法类似,在实例方法内部中,调用类中定义的属性,使用self.属性名进行访问,而在类方法内部中,调用类属性,使用cls.类属性名进行访问。可以使用cls.类方法调用其它类的方法。使用类名.调用类方法。

3.静态方法

在类内部定义方法时不需要使用任何属性,则可以将方法定义为静态方法。
格式:

@staticmethod 
    def 方法名()
        pass

实例:

class Dog:
    @staticmethod
    def run():
        print("小狗跑。。。")
#通过类名.方法使用静态方法时,不需要创建对象
Dog.run()

输出结果:

小狗跑。。。

4.实例方法、类方法、静态方法使用原则

1)实例方法:当方法内部需要访问实例属性,可以通过self.属性名进行访问。注意:当方法内部既需要访问实例属性也需要访问类属性时,使用实例方法。
2)类方法:当方法内部需要访问类属性,可以通过cls.类属性进行访问。
3)静态方法:当方法内部即不需要访问类属性,也不需要访问实例属性。
实例:

class Game(object):
    #历史最高分
    top_score = 0
    def __init__(self,player_name):
        self.name = player_name
    def __str__(self):
        return "玩家姓名为:%s"%self.name
    @staticmethod
    def show_help():
        print("帮助信息:让僵尸进入大门")
    @classmethod
    def show_top_score(cls):
        #在类方法内部访问类属性cls.类属性
        print("当前最高分为:%d"%cls.top_score)
    def start_game(self):
        print("%s开始游戏"%self.name)
#查看帮助信息(静态方法无需创建对象,直接使用类名.静态方法就可以使用)
Game.show_help()
#查看历史最高分(类方法无需创建对象,直接使用类名.类方法就可以使用)
Game.show_top_score()
#创建游戏对象(对象的实例方法必须创建对象之后使用)
game = Game("xiaoming")
game.start_game()

输出结果:

帮助信息:让僵尸进入大门
当前最高分为:0
xiaoming开始游戏

5.继承

继承的目的时实现代码的重用。相同的代码不需要重新编写。在子类中使用super().父类方法()
实例:

class Animal:
    def eat(self):
        print("吃")
    def drink(self):
        print("喝")
class Dog(Animal):
    def bark(self):
        print("汪汪叫")
class Xiaotianquan(Dog):
    def fly(self):
        print("飞")
    def bark(self):
        #1 针对子类特有需求编写方法
        print("嗷嗷叫")
        #2 使用super调用原本在父类中的方法
        super().bark()
        #3 增加子类代码
        print("$#%2")
wangcai = Xiaotianquan()
wangcai.eat()
wangcai.drink()
wangcai.bark()
print(wangcai)

输出结果为:

吃
喝
嗷嗷叫
汪汪叫
$#%2

6.多态

不同子类调用相同父类方法产生不同结果,以继承和重写父类为前提。
实例:

class Dog(object):
    def __init__(self,name):
        self.name = name
    def game(self):
        print("%s玩球" % self.name)
class Xiaotiandog(Dog):
    def game(self):
        print("%s在天上玩耍" % self.name)
class Person(object):
    def __init__(self,name):
        self.name = name
    def game_with(self,dog):
        print("%s和%s愉快的玩耍" % (self.name,dog.name))
        #让狗玩耍
        dog.game()
#创建一个狗对象
wangwang = Dog("wangwang")
#创建小明对象
xiaoming = Person("小明")
#让小明和狗玩
xiaoming.game_with(wangwang)

输出结果:

小明和wangwang愉快的玩耍
wangwang玩球
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值