python面向对象特性_python学习之面向对象高级特性

05_类属性鱼实例属性.py

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)

"""

06_类方法和静态方法.py

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()

07_类方法和静态方法的应用.py

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属性的定义和调用要注意一下几点:

定义时,在实例方法的基础上添加 @property 装饰器;并且仅有一个self参数

调用时,无需括号

类属性应用需求: 对于京东商城中显示电脑主机的列表页面,每次请求不可能把数据库

中的所有内容都显示到页面上,而是通过分页的功能局部显示,所以在向数据库中请求

数据时就要显示的指定获取从第m条到第n条的所有数据 这个分页的功能包括:

? 根据用户请求的当前页和总数据条数计算出 m 和 n

? 根据m 和 n 去数据库中请求数据

property属性的有两种方式:

? 装饰器 即:在方法上应用装饰器

? 类属性 即:在类中定义值为property对象的类属性

注意:

? 经典类中的属性只有一种访问方式,其对应被 @property 修饰的方法

? 新式类中的属性有三种访问方式,并分别对应了三个被@property、@方

法名.setter、@方法名.deleter修饰的方法

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)

"""

# 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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值