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)
输出: