自学python类,这边是笔记总结
一、概念
1. 类&实例(class & instance)
类 | 实例 | |
---|---|---|
类比 | “飞机图纸” | “ 飞机” |
数量 | 只有一个 | 可以很多 |
形式 | class Person: | a=Person() |
2. 属性&方法(attribute & method)
属性 | 方法 | |
---|---|---|
类比 | 变量 | 函数 |
定义属性和方法并调用的代码如下:
class Person:
#attribute fields
name='liufang'
age=12
#method
def intro(self):
print("Hi")
#Create an Object
p1=Person()
#Call the method
p1.intro() # Hi
print(p1.age) # 12
3. 构造方法
可以实现:
- 在创建类对象的时候,将参数自动传入(并且必须要传入参数)
- 在创建类对象的时候,会自动执行
- 构造方法属于实例方法,必须在参数列表中提供self
- 构造方法内定义成员变量,需要使用self关键字(self.name=name)
class Person:
def __init__(self,name,age):
self.name=name
self.age=age
print("haha")
p1=Person('小红',11) #会输出haha
print(p1.age) # 11
4. 类变量 &实例变量
类变量 | 实例变量 | |
---|---|---|
区别 | 类变量用于类的所有实例共享的数据 | 实例变量用于每个实例的唯一数据 |
class Person:
skin='yellow'
tricks=[]
def __init__(self,name):
self.name=name
def add_trick(self,trick):
self.tricks.append(trick)
p1=Person('小红')
p2=Person('小王')
print(p1.skin) # yellow
print(p2.skin) # yellow
p1.add_trick('run')
print(p2.tricks) # ['run']
由于skin是类变量,所以被p1和p2所共享,因此都输出yellow;
同样的因为tricks被p1和p2所共享,因此p1实例改变了tricks,p2输出tricks也会改变
4. 类方法 &实例方法
实例可以用类变量和类方法,反之类却不能用实例变量和方法
类方法需要加@classmethod,参数需要输入cls
class Person:
num=0
def __init__ (self,name):
self.name=name
def getname(self):
return f'学生:{self.name}'
@classmethod
def getnum(cls):
return f'人数:{Person.num}'
p1=Person('小红')
print(p1.getname()) # 学生:小红
print(Person.getnum()) # 人数:0