0 两个例子
先简单整理两个简单的例子:
class Student(object): #Student为类名
def __init__(self, name, score):
#强制给类里面的(实例self)上name和score属性(和函数的唯一区别)
self.name = name
self.score = score
def get_grade(self): #类的优势!
if self.score >= 90:
return 'A'
elif self.score >= 60:
return 'B'
else:
return 'C'
def print_score(self): #类的优势!
print('%s: %s' % (self.name,self.score))
lisa = Student('Lisa', 99)
bart = Student('Bart', 59)
print(lisa.name, lisa.get_grade())
print(bart.name, bart.get_grade())
lisa.print_score()
Lisa A
Bart C
Lisa: 99
class Dog(): # 类名要大写
def __init__(self, name, age):
self.name = name
self.age = age
def sit(self):
'''模拟小狗蹲下'''
print(self.name.title() + ' is now sitting')
def roll_over(self):
print(self.name.title() + " rolled over")
my_dog = Dog("wangzai", 3)
my_dog.sit()
my_dog.roll_over()
Wangzai is now sitting
Wangzai rolled over
1 类与实例 class与instance of class
1.1 实例变量
class Employee: # 类名要大写
def __init__(self, first, last, pay):
self.first = first
self.last = last
self.pay = pay
self.email = first + '.' + last + "@nwafu.edu.cn"
self为当前实例本身
#__init__方法是创建实例的初始化方法,也可称为构造方法
操作是基于实例的,实例(地址)
1.2 实例方法
def fullname(self):
return '{} {}'.format(self.first, self.last)
emp_1 = Employee('sun', 'tong', 3000)
print(emp_1.email,emp_1.first)
print(emp_1.fullname())
sun.tong@nwafu.edu.cn sun
sun tong
2 类变量
class Employee: # 类名要大写
raise_count = 1.04 # 4%
def __init__(self, first, last, pay):
self.first = first
self.last = last
self.pay = pay
self.email = first + '.' + last + "@nwafu.edu.cn"
def fullname(self):
return '{} {}'.format(self.first, self.last)
def apply_raise(self):
self.pay = int(self.pay * Employee.raise_count) # 类变量调用
emp_1 = Employee('sun', 'tong', 3000)
emp_2 = Employee('s', 't', 3000)
print(emp_1.email, emp_1.first)
print(emp_1.fullname())
emp_1.apply_raise()
print(emp_1.pay)
emp_2.raise_count = 2
emp_2.apply_raise()
print(emp_2.pay)
这样子是不能够单独调整raise_court,要把def apply_raise(self):里面的Employee换成self
def apply_raise(self):
self.pay = int(self.pay * self.raise_count) # 类变量调用
3120
6000
这就是类变量,可以单独为每个实例单独调整
3 类方法与静态方法
@classmethod
@classmethod
def set_raise_count(cls, count):
cls.raise_count = count
emp_1 = Employee('sun', 'tong', 3000)
emp_2 = Employee('s', 't', 3000)
emp_2.set_raise_count(1.04)
# Employee.set_raise_count(1.04)
print(emp_2.raise_count,emp_1.raise_count)
1.04 1.04
不能给每个实例单独调整。一般是用为创建对象的
@staticmethod
4 继承
5 类中特殊方法重写
6 属性装饰器