深入学习理解一点儿python

Python中的staticmethod与classmethod
class Date(object):
    day = 0
    month = 0
    year = 0
    
    def __init__(self, day=0, month=0, year=0):
        self.day = day
        self.month = month
        self.year = year
	
	@classmethod   # 第一参数为cls
    def from_string(cls, date_as_string):
        day, month, year = map(date_as_string.split('-'))
        date1 = cls(day, month, year)
        return date1
   
    @staticmethod  # 类的静态方法
	def is_date_valid(date_as_string):
	    day, month, year = map(int, date_as_string_split('-'))
	    return day <= 31 and month <= 12 and year <= 3999
#   一般使用
day, month, year = map(int, string_date.split('-'))
date1 = Date(day, month, year)
#   类方法调用
date2 = Date.from_string('11-09-2012')
#   类的静态方法。类可以直接使用
is_date = Date.is_date_valid('11-09-2012')
python中的property

property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值


为什么要用property
将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个函数然>后计算出来的,这种特性的使用方式遵循了统一访问的原则

import math
class Circle:
    def __init__(self,radius): #圆的半径radius
        self.radius=radius

    @property
    def area(self):
        return math.pi * self.radius**2 #计算面积

    @property
    def perimeter(self):
        return 2*math.pi*self.radius #计算周长

c=Circle(10)
print(c.radius)
print(c.area) #可以向访问数据属性一样去访问area,会触发一个函数的执行,动态计算出一个值
print(c.perimeter) #同上
'''
输出结果:
314.1592653589793
62.83185307179586
'''
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐