类相当于一个模板,依据这样的模板来创建对象
- 实例属性和实例方法属于对象,通过对象调用
-
构造方法
类中的 init() 方法 ,是一个特殊的方法,用来创建和初始化实例属性的,构造方法又叫初始化函数。
语法: init(self, <变量1>, <变量2>,<…>) init 两边是双下划线
- 第一个参数必须是 self
```python
class Animal(object):
def init(self, name, age = 20): # 构造方法第一个参数必须是 self,可以带有默认值的变量
self.name = name # 创建和初始化实例变量 nameself.age = age # 实例变量就是给对象赋值
dog = Animal(‘tom’) # 创建一个叫 tom 的狗的实例,调用时不需要传入 self 参数 cat = Animal(‘jerry’, 25) # 创建一个 25 岁叫 jerry 的猫的实例
print(f’这只狗叫 {dog.name},今年 {dog.age}’) # 对实例变量通过 对象.实例变量 形式访问 print(f’这只狗叫 {cat.name},今年 {cat.age}’)
> 在创建⼀个对象时,初始化函数自动被调用,不需要手动调⽤。同时一个类可以创建多个不同实例,赋予不同属性值<a name="pheXi"></a>###<a name="p3o5K"></a>### self**self **指的是**当前的实例对象。同时类中所有方法都要以 self 作为第一个参数传递进去**```python# coding=utf-8class Washer(object):def wash(self): # 类方法第一个参数必须是 self,所有 self 指的是 dog 这个实例print('洗衣服')print(self) # 打印 self 地址haier = Washer()print(haier)haier.wash()----------------------------------------------------------------------------------->>> <__main__.Washer object at 0x10d2bc850>>>> 洗衣服>>> <__main__.Washer object at 0x10d2bc850>
通过上述打印结果法相,self 的地址和实例的地址一样,说明 self 指的是当前实例对象。
变量
- 变量,用于保存类或对象的数据。
- 变量分为 实例变量 和 类变量
- 变量既可以在类外面添加和获取,也能在类里面添加和获取
实例变量
- 类外通过 实例名.变量名 = 值 添加。只能对当前实例生效
```python
class Animal(object):
def play(self):
print('打球')
dog = Animal()
dog.name = ‘tom’
print(dog.name) # 通过 实例名.变量名 获取属性
- 类内通过 **实例名**(**self).变量名 **添加实例变量。**实际编程中使用 初始化函数 ,不推荐使用该方法**```pythonclass Animal(object):def paly(self):print(f'这条狗名字叫{self.name}') # 在类内部通过 self.属性名 添加实例属性dog = Animal()dog.name = 'jerry'dog.paly() # 通过实例调用方法获取属性------------------------------------------------------------------------------------------>>> 这条狗叫 jerry
类属性
即类变量,就是 类对象 所拥有的变量,即它被该类的所有实例对象所共有。类属性可以使用 类对象 或 实例对象 访问
- 访问类变量
```python
class Animal(object):
age = 5 # 定义类变量
def init(self, name):
self.name = name
dog = Animal(‘jerry’)
print(Animal.age) # 通过 类名.类变量名 访问
dog.age # 通过 实例.类变量名 访问
5 5 ```
- 修改类属性 ```python class Animal(object): age = 5
dog = Animal() cat = Animal()
Aninmal.age = 10 # 通过 类对象 修改 类属性 print(Animal.age) print(dog.age)
print(cat.age)
10 10 10 ``` 类属性只能通过 类对象 修改。如果通过实例对象修改其实是创建一个实例属性并非修改类属性
方法
实例方法
实例方法与实例变量一样,都是某个实例(对象)特有的方法
- 不传参数的实例方法
```python
class Animal(object):
def play(self): # 第一个参数必须是 self
print('旺旺')
dog = Animal() # 生成一个实例 dog.play() # 通过 实例名.实例方法() 进行方法调用 dog.speak(‘汪 汪 汪’) # 调用时要传入实参
> 定义实例方法时,第一个参数是 self,就会将当前实例与该方法绑定,说明该方法属于实例,类无法调用该方法。在调用方法时不需要传入 self- **传递参数的实例方法**```pythonclass Animal(object):def eat(self, food): # 设置形参print(f'在吃{food}')dog = Animal()dog.eat('旺旺雪饼') # 传递实参,通过 实例名.方法() 进行调用--------------------------------------------------------------------->>> 在吃旺旺雪饼
类方法
类方法和类变量类似,属于类,不属于实体。但是,在定义类方法时他的第一个参数不是 self,而是类本身,即 cls
定义类方法需要装饰器,装饰器以 @ 为开头修饰函数、方法和类
用 装饰器 @classmethod 来标识其为类方法
class Person(object):def eat(self):print('hello world')@classmethod # 声明类方法def greet(cls): # cls 代表类自身,即 Person 类;cls 可以用 Person 替换print('hello kuma')Person.greet() # 类名.类方法 调用p = Person() # 使用实例调用p.greet()--------------------------------------------------------------------------------------->>> hello kuma>>> hello kuma
类方法可以访问类变量和其他类方法,但不能访问其他实例方法和实例变量
静态方法
用 装饰器 @staticmethod 来标识其为静态方法
class Person(object):def eat(self):print('hello world')@staticmethoddef eat(): # 静态方法既不需要传递类对象也不需要传递实例对象( 形参没有 self/cls )print('安静恰饭')Person.eat()p = Person()p.eat()----------------------------------------------------------------------------------------------->>> 安静恰饭>>> 安静恰饭
当方法中 既不需要使用实例对象,也不需要使用类对象,用静态方法
