Python语言程序设计 学习笔记(二)面向对象详解:类、属性、方法、装饰器、继承和多态

1.类和对象

1.1 如何定义类

class className:
	...(属性和方法)

1.2 属性和方法

1.2.1 类属性、类方法、实例属性、实例方法和静态方法

看一个例子就明白了

class Game:
    top_score=0 #类属性
    def __init__(self,player_name): #构造方法
        self.player_name=player_name #实例属性
        self.top_score=123 #实例属性
    
    @staticmethod  #静态方法
    def show_help():
        print("This is help info!")
    
    @classmethod #类方法
    def show_top_score(cls):
        print(cls.top_score)
    
    def start_game(self): #实例方法
        print("start game!")
        Game.top_score=999 #实例方法访问类属性
    
game=Game("tjl") #实例化
print("对象名访问top_score:%s "%(game.top_score)) #实例名(对象名).访问属性,根据查找顺序,同名优先调用实例属性
print("类名访问top_score:%s "%(Game.top_score)) #类名.访问类属性
game.show_help() #实例名.访问静态方法
Game.show_help() #类名.访问静态方法
Game.show_top_score() #类名.访问类方法
game.start_game() #实例名.访问实例方法
Game.show_top_score() #类名.再次访问类方法
Game.start_game() #会报错!不能通过类名.访问实例方法

1.2.2 私有属性、特殊属性

私有属性

--name

如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问

特殊属性

__name__ #这个变量就是一个特殊属性,可以通过类名.直接访问,用来获取类的名称

在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的。

还有一种属性,叫建议不能直接修改的属性

_name #以一个下划线开头

这种属性实际上属于实例属性,可以通过实例名.访问和修改,但Python建议不要直接修改它的值,而是借用get和set方法来修改。

1.2.3 装饰器

class Student(object):

    @property
    def score(self):
        return self._score

    @score.setter
    def score(self, value):
        if not isinstance(value, int):
            raise ValueError('score must be an integer!')
        if value < 0 or value > 100:
            raise ValueError('score must between 0 ~ 100!')
        self._score = value

2.继承和多态

2.1 继承

2.1.1 如何继承

class 子类名称(父类名称):
    pass

2.1.2 继承的作用

子类获得了父类的全部功能,包括属性和方法。
子类还可以增加自己的属性和方法。
子类可以重写父类的方法。

2.2 多态

2.2.1 什么是多态

一句话:子类对象既是子类类型的也是父类类型的,反之不行。
例如:Cat类继承自Animals类,那么Cat类的实例化对象既是Cat类型,也是Animals类型。

2.2.2 多态的作用

多态可以使方法调用忽略内部细节,而只管调用。
例如:

class Person:
    def say(self):
        print("I am a person!")

class Man(Person):
    def say(self):
        print("I am a men!")
 
class Woman(Person):
    def say(self):
        print("I am a woman!")

def let_them_say(person):
    person.say()

a = Person()
b = Man()
c = Woman()

let_them_say(a)
let_them_say(b)
let_them_say(c)

输出:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值