前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >(二十五) 初遇python OOP面向对象编程-类变量

(二十五) 初遇python OOP面向对象编程-类变量

作者头像
XXXX-user
修改2019-07-30 10:58:27
3370
修改2019-07-30 10:58:27
举报
文章被收录于专栏:不仅仅是python

各位读者大大们大家好,今天学习python的面向对象编程-类变量,并记录学习过程欢迎大家一起交流分享。

新建一个python文件命名为py3_oop2.py,在这个文件中进行操作代码编写:

代码语言:javascript
复制
#面向对象编程
#类变量
#在类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

运行结果:

代码语言:javascript
复制
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的面向对象编程-类变量学习就到这里!

关注公号

下面的是我的公众号二维码图片,欢迎关注。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yale记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关注公号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档