前言
一切皆对象
Python中的万物都是类与对象,甚至一个int数也是一个类对象,这点与C++和Java稍有不同。
动态绑定
下面一点学过C++的可能有些不适应。python中同一个类在创建对象后,每个对象可以为自己对象声明不同的属性和方法.
1. 定义类
class Students:
# 初始化方法
def __init__(self, age, name):
self.age = age
self.name = name
# 1.类变量:所有对象都有这个变量
nativePlace = '吉林'
# 2.对象方法:只能对象调用,可动态绑定
def eat(self):
print('学生在吃饭...')
# 3.静态方法:
@staticmethod
def method():
print('我使用了static修饰')
# 4.类方法:所有对象都拥有的方法,可通过对象和类调用
@classmethod
def cm(cls):
print('我是类方法')
在上面这个类声明中,我们定义了:
(下面的名字自己起的,学过C++的可能更好理解)
- 初始化方法
- 类属性
- 对象属性
- 对象方法
- 类方法
- 静态方法
我们将逐一介绍。
1.1 类属性
一旦在类中声明,类的对象都会有这个属性,所以称之为类属性。比如上面的nativePlace
1.1 对象属性
对象属性可以是每个对象所独有的属性,比如stu1有sex这个属性,而stu2有height这个属性。对象属性一般不在类中声明,而是在对象创建后动态绑定。
但上面的name和age,我们可以称之为对象属性,因为:
尽管在这里每个对象在创建时都会拥有name和age这两个属性且值相同,但这种类型的属性在后面可以动态绑定。比如:
stu1.sex='男'
这时stu2
就没有这个属性。
1.3 初始化方法
# 初始化方法
def __init__(self, age, name):
self.age = age
self.name = name
初始化方法在创建每一个对象的时候会被调用。
里面有两个属性:name和age,我称这种为对象属性。
1.4 对象方法
对象方法是每个对象所独有的,也可以动态绑定,但上面的:
def eat(self):
print('学生在吃饭...')
虽然每个对象都有这个方法,但这种的方法是可以动态的,所以仍称之为对象方法.
对象方法有两种调用格式:
stu1.eat()
Students.eat(stu1)
1.5 类方法
类方法就是属于这个类的,通过类名或对象调用,但通过对象调用时不用传对象。
Students.cm()
stu1.cm()
总结
类方法和对象方法都能通过类名和对象名调用,但这两种方法的区别还是对象方法可以动态绑定。
2. 动态绑定
动态绑定是对象属性和对象方法
class Students:
def __init__(self, name, age):
self.name = name
self.age = age
def drink(self):
print('eat')
stu1 = Students(20, '张三')
stu2 = Students(21, '李四')
print('------为stu2动态绑定属性-----')
stu2.gender = '女'
print(stu2.gender)
print('------为stu2动态绑定办法-----')
def show():
print('show for stu2')
stu2.show = show
stu2.show()
此时stu1是没有这个show
方法和gender
属性的。
3. 多态和继承
python的类同样有封装、多态和继承的特性…