各位读者大大们大家好,今天学习python的面向对象编程-类变量,并记录学习过程欢迎大家一起交流分享。
新建一个python文件命名为py3_oop2.py,在这个文件中进行操作代码编写:
#面向对象编程
#类变量
#在类Employee中
#定义新的方法
#apply_raise()
#薪水提升比例方法
class Employee:
def __init__(self,first,last,pay):
self.first = first
self.last = last
self.email = first + '.' + last +'@email.com'
self.pay = pay
def fullname(self):
return '{} {}'.format(self.first,self.last)
def apply_raise(self):
self.pay = int(self.pay * 1.04)
emp_1 = Employee('T','Bag',50000)
#打印emp_1薪水
print(emp_1.pay)
#提升emp_1薪水4%
emp_1.apply_raise()
#打印提升后的薪水
print(emp_1.pay)
#打印结果:
#50000
#52000
#将薪水提升比例定义为类变量方式
#修改Employee类:
class Employee:
raise_amount = 1.04# 定义类变量 薪水提升比例
def __init__(self,first,last,pay):
self.first = first
self.last = last
self.email = first + '.' + last +'@email.com'
self.pay = pay
def fullname(self):
return '{} {}'.format(self.first,self.last)
def apply_raise(self):
self.pay = int(self.pay * self.raise_amount)
emp_1 = Employee('T','Bag',50000)
emp_2 = Employee('Mc','User',6000)
#打印emp_1薪水
print(emp_1.pay)
#提升emp_1薪水4%
emp_1.apply_raise()
#打印提升后的薪水
print(emp_1.pay)
#同时打印Employee、emp_1、emp_2
#的raise_amount值
print(Employee.raise_amount)#1.04
print(emp_1.raise_amount)#1.04
print(emp_2.raise_amount)#1.04
#使用python特殊字典__dict__
#打印emp_1对象的属性信息
print(emp_1.__dict__)
#打印结果:
#{'first': 'T', 'last': 'Bag', 'email': 'T.Bag@email.com', 'pay': 52000}
#这里发现实例化对象并没有raise_amount属性
#接下来我们打印Employee类的__dict__
print(Employee.__dict__)
#打印结果:
#{'__module__': '__main__', 'raise_amount': 1.04,
# '__init__': <function Employee.__init__ at 0x0000000002266378>,
# 'fullname': <function Employee.fullname at 0x0000000002266400>,
# 'apply_raise': <function Employee.apply_raise at 0x0000000002266488>,
# '__dict__': <attribute '__dict__' of 'Employee' objects>,
# '__weakref__': <attribute '__weakref__' of 'Employee' objects>,
# '__doc__': None}
#我们发现Employee类中含有raise_amount属性
#我们修改raise_amount值看如下变化:
Employee.raise_amount = 1.05
print(Employee.raise_amount)#1.05
print(emp_1.raise_amount)#1.05
print(emp_2.raise_amount)#1.05
#可以看出修改了类的变量的值
#实例化对象emp_1 emp_2会跟着改变
#我们修改emp_1.raise_amount
emp_1.raise_amount = 1.04
print(Employee.raise_amount)#1.05
print(emp_1.raise_amount)#1.04
print(emp_2.raise_amount)#1.05
#这里我们发现 只有emp_1的raise_amount
#值是改变的
#为什么会是这样的???
#因为当我们对emp_1的raise_amount赋值时,
#实际上是为emp_1对象创建了一个raise_amount属性
#揭开事实的真相:
print(emp_1.__dict__)
#{'first': 'T', 'last': 'Bag',
#'email': 'T.Bag@email.com',
#'pay': 52000, 'raise_amount': 1.04}
#发现raise_amount出现了
#在定义一个类变量计算员工总人数
#num_of_emps
#修改Employee类:
class Employee:
raise_amount = 1.04#定义类变量 提升比例
num_of_emps = 0 #总人数
def __init__(self,first,last,pay):
self.first = first
self.last = last
self.email = first + '.' + last +'@email.com'
self.pay = pay
#每次初始化一个对象 数量加1
Employee.num_of_emps +=1
def fullname(self):
return '{} {}'.format(self.first,self.last)
def apply_raise(self):
self.pay = int(self.pay * self.raise_amount)
#测试:
print(Employee.num_of_emps) #0
emp_1 = Employee('T','Bag',50000)
emp_2 = Employee('Mc','User',6000)
print(Employee.num_of_emps) #2
运行结果:
50000
52000
50000
52000
1.04
1.04
1.04
{'first': 'T', 'last': 'Bag', 'email': 'T.Bag@email.com', 'pay': 52000}
{'__module__': '__main__', 'raise_amount': 1.04,
'__init__': <function Employee.__init__ at 0x00000000021B7C80>,
'fullname': <function Employee.fullname at 0x00000000021B7D08>,
'apply_raise': <function Employee.apply_raise at 0x00000000021B7D90>,
'__dict__': <attribute '__dict__' of 'Employee' objects>,
'__weakref__': <attribute '__weakref__' of 'Employee' objects>,
'__doc__': None}
1.05
1.05
1.05
1.05
1.04
1.05
{'first': 'T', 'last': 'Bag', 'email': 'T.Bag@email.com',
'pay': 52000, 'raise_amount': 1.04}
0
2
今天初学python的面向对象编程-类变量学习就到这里!
下面的是我的公众号二维码图片,欢迎关注。