目录
1. 创建类的语法
class Student:
place = 'China'
# 初始化方法
def __init__(self,name,age): # 初始化方法
self.name = name # self.name = name 实例属性
self.age = age
# 静态方法
@staticmethod
def fun1():
print("静态方法")
# 类方法
@classmethod
def fun2(cls):
print("类方法")
# 方法
def eat(self):
print("eating...")
2. 类的组成
类由5部分组成,分别为:
初始化方法 | 使用初始化方法创建实例对象 |
类属性 | 直接写在类里的属性称为类属性 |
实例方法 | 实例方法是类的实例对象能够调用的方法 |
静态方法 | 没有默认参数,不能使用类或者实例的任何属性和方法,用装饰器 @staticmethod 修饰 |
类方法 | 有默认参数,可以使用类的属性和方法,但不能使用实例的属性和方法,用装饰器 @classmethod 修饰 |
这里主要解释一下初始化方法和类属性。
1)初始化方法
class Student:
def __init__(self,name,age): # 初始化方法
self.name = name # self.name = name 实例属性
self.age = age
stu = Student("Tom",18)
print(stu.name) # Tom
print(stu.age) # 18
我们可以通过初始化方法来创建实例对象,每个class只能有一个初始化方法。在创建对象的时候,会自动调用初始化方法进行创建,不需要手动调用。
2)类属性
class Student:
place = 'China'
def __init__(self,name,age):
self.name = name
self.age = age
stu = Student("Tom",18)
stu2 = Student("Bob",18)
print(stu.palce) # China
print(stu2.palce) # China
print(Student.palce) # China
类属性可以通过两种方式进行调用:
(1)类名.类属性
(2)对象名.类属性
当使用类名.类属性对类属性进行修改的时候,无论之后用哪种方式再次调用该类属性,类属性的值都是修改后的值。
当使用对象名.类属性对类属性进行修改时,只有该对象再次调用的时候类属性的值是修改后的值,其他对象不变。
# 通过类名.类属性修改
Student.place = 'Beijing'
print(stu.place) # Beijing
print(stu2.place) # Beijing
# 通过对象名.类属性修改
stu.place = 'Shanghai'
print(stu.place) # Shanghai
print(stu2.place) # China
print(Student.place) # China
为什么在使用stu.place进行修改时,只有stu的被修改了,而stu2.place和Student.place都没有修改?
这是因为我们在通过对象名访问变量时,会首先在对象的内存中找该变量,如果实例中没有这个变量值,才会去他的类对象中查找。当我们想要通过stu去修改这个‘类属性’的时候,其实我们并没有修改类对象中的‘place’,而是在stu的内存中创建了一个新的place属性,去存储这个新值。因此再次访问的时候,直接访问的就是实例对象的place,而不是类对象中的place了。
可以用一张图来表示这个过程:
本文参考: