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

(二十六) 初遇python OOP面向对象编程-类方法和静态方法

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

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

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

代码语言:javascript
复制
#面向对象编程
#类方法和静态方法

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
    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)
  #类方法用@classmethod标识符修饰  
  #cls作为第一个参数用来表示类本身. 
  #在类方法中用到,类方法是只与类本身有关
  #而与实例无关的方法
  @classmethod  
  def set_raise_amt(cls,amount):
    cls.raise_amount = amount
  #定义一个接收emp String
  #返回实例化对象的类方法
  @classmethod
  def from_emp_str(cls,emp_str):
    first,last,pay = emp_str.split('-')
    #这里理解为调用
    #Employee(first,last,pay)
    #并返回
    return cls(first,last,pay)   
  #静态方法用@staticmethod标识符修饰
  #就像一个普通的函数
  #判断是不是工作日
  @staticmethod  
  def is_workday(day):
    if day == 5 or day ==6:
      return False
    return True

emp_1 = Employee('T','Bag',50000)
emp_2 = Employee('Mc','User',6000)
Employee.set_raise_amt(1.05)
print(Employee.raise_amount)#1.05
print(emp_1.raise_amount)#1.05
print(emp_2.raise_amount)#1.05
#我们调用emp_1.set_raise_amt()
#在打印
Employee.set_raise_amt(1.06)
print(Employee.raise_amount)#1.06
print(emp_1.raise_amount)#1.06
print(emp_2.raise_amount)#1.06
#发现类和实例对象的raise_amount全部跟着改变
#我们打印emp_1的属性信息
print(emp_1.__dict__)
#{'first': 'T', 'last': 'Bag', 'email': 'T.Bag@email.com', 
'pay': 50000}
#这里并不包含raise_amount属性
#因为调用类方法set_raise_amt
#修改的是类的变量属性

#定义一个emp string
#调用from_emp_str()
emp_str = 'T-Bag-5000'
new_emp_1 = Employee.from_emp_str(emp_str)
print(new_emp_1.email)#T.Bag@email.com
#调用类Employee静态方法:
import datetime
today = datetime.datetime.today()
print(Employee.is_workday(today))#True

运行结果:

代码语言:javascript
复制
1.05
1.05
1.05
1.06
1.06
1.06
{'first': 'T', 'last': 'Bag', 'email': 'T.Bag@email.com', 
'pay': 50000}
T.Bag@email.com
True

今天初学python的面向对象编程-类方法和静态方法学习就到这里!

关注公号

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

yale记公众号

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

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

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

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

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