您好,登錄后才能下訂單哦!
類屬性與實例屬性
類屬性就是類對象所擁有的屬性,它被所有類對象的實例對象所共有,在內存中只存在
一個副本。
在前面的例子中我們接觸到的就是實例屬性(對象屬性),它不被所有類對象的實
例對象所共有,在內存中的副本個數取決于對象個數。
import random
class Turtle(object):
# power是類屬性。
power = 100
def __init__(self):
# x,y:實例屬性.
self.x = random.randint(0, 10)
self.y = random.randint(0, 10)
#1). 類屬性不管有多少個對象, 都只存儲一份。 實例屬性存儲的個數取決于實例的個數.
#2). 作用域不同:
# 類屬性: 通過類名/對象名來訪問
# 實例屬性: 只能通過對象名來訪問。
print(Turtle.power)
turtle1 = Turtle()
print(turtle1.power, turtle1.x, turtle1.y)
類方法與靜態方法類方法是類對象所擁有的方法,需要用修飾器一般以@classmethod來標識其為類方法,
br/>類方法是類對象所擁有的方法,需要用修飾器一般以@classmethod來標識其為類方法,
(cls是形參, 可以修改為其它變量名,但最好用'cls'了)
2). 能夠通過實例對象和類對象去訪問。類方法與靜態方法
靜態方法需要用修飾器一般以@staticmethod來標識其為靜態方法,
br/>類方法與靜態方法
靜態方法需要用修飾器一般以@staticmethod來標識其為靜態方法,
2). 能夠通過實例對象和類對象去訪問。
"""
1). @classmethod: 類方法
2). @staticmethod:靜態方法
"""
import random
class Turtle(object):
def __init__(self):
# x,y:實例屬性.
self.x = random.randint(0, 10)
self.y = random.randint(0, 10)
self.power = 100
#默認情況下, Python解釋器會自動將對象傳遞給類里面定義的方法。
def eat(self):
print("self: ", self)
self.power += 20
@classmethod
def cls_example(cls):
print("cls: ", cls)
@staticmethod
def static_example():
print("靜態方法.......")
turtle = Turtle()
turtle.eat()
turtle.cls_example()
turtle.static_example()
#類方法能夠通過實例對象和類對象去訪問。
Turtle.cls_example()
#靜態方法能夠通過實例對象和類對象去訪問。
Turtle.static_example()
import time
''''''
#系統自帶date類的使用
from datetime import date
dateObj = date(2019, 10, 10)
print(dateObj)
print(date.today())
"""
class Date(object):
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
def __str__(self):
return "%s-%s-%d" % (self.year, self.month, self.day)
@classmethod
def today(cls):
"""
返回當前的日期對象
cls: 類名稱Date
:return: Date實例化的對象名稱
"""
#獲取當前的時間, 返回的是命名元組的格式
#time.struct_time(tm_year=2019, tm_mon=12, tm_mday=29, tm_hour=16, tm_min=49, tm_sec=32, tm_wday=6, tm_yday=363, tm_isdst=0)
now = time.localtime()
return cls(now.tm_year, now.tm_mon, now.tm_mday)
def is_leap(self):
"""
判斷是否為閏年?
一個閏年就是能被4整除但是不能被100整除 或者 year能被400整除.
:return:
"""
return (self.year % 4 == 0 and self.year % 100 != 0) or (self.year % 400 == 0)
if __name__ == '__main__':
# 獲取當前日期, today是當前日期對象。
today = Date.today()
#打印日期對象, 返回字符串'2019-12-29', 因為有__str__魔術方法。
print(today)
#判斷是否為閏年?
print("今年是否為閏年? ", today.is_leap())
#dateObj = Date(2019, 10, 10)
#print(dateObj)
property類屬性
什么是property屬性?
一種用起來像是使用的實例屬性一樣的特殊屬性,可以對應于類的某個方法。
property屬性的定義和調用要注意一下幾點:
from datetime import date
class Date(object):
def __init__(self, year, month, day):
self.__year = year
self.__month = month
self.__day = day
#功能一: 將類方法轉換成類屬性
#應用場景: 某個屬性只能訪問不能修改時使用。
@property
def year(self):
return self.__year
@property
def month(self):
return self.__month
@property
def day(self):
return self.__day
def __str__(self):
return "%s-%s-%d" % (self.__year, self.__month, self.__day)
if __name__ == '__main__':
dateObj = Date(2019, 12, 12)
print(dateObj.day)
"""
# 08_property類屬性.py
from datetime import date
class Date(object):
def __init__(self, year, month, day):
self.__year = year
self.__month = month
self.__day = day
#功能一: 將類方法轉換成類屬性
#應用場景: 某個屬性只能訪問不能修改時使用。
@property
def year(self):
return self.__year
@property
def month(self):
return self.__month
@property
def day(self):
return self.__day
def __str__(self):
return "%s-%s-%d" % (self.__year, self.__month, self.__day)
if __name__ == '__main__':
dateObj = Date(2019, 12, 12)
print(dateObj.day)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。