——   阿里云购买流程   ——
加入阿里云合作伙伴[云创得力]关联大客户账户购买阿里云产品,享受更多优惠
1.申请产品优惠

咨询客服或网络在线咨询,协助上云服务
点击关联阿里云填写表单,等待客服服务

2.关联大客户账户

①无账号:客服微信发送的注册链接进行关联
②已注册阿里云:客服微信发送关联链接
续费、充值、新购均享优惠。

3.阿里云官网提交订单

产品架构师协助客户挑选配置
阿里云官网选配置提交订单

4.付款开通

付款后,即可申请阿里云原价发票

5.申请阿里云发票凭据

购买后可申请阿里云原价发票

6.技术服务

免费协助配置、备案,售后7*24反馈,全周期专业服务
最高可选208 vCPU,内存3072 GiB,带宽35GBps

热门产品  :
上云必购  :
云服务器 ECS hot
云虚拟主机 hot
云数据库 RDS MySQL 版
云数据库 Redis 版
云数据库 HBase 版
对象存储 OSS
块存储
表格存储
负载均衡
共享流量包
全站加速 CDN
弹性公网 IP
VPN 网关
产品搭配  :
域名注册 hot
阿里企业邮箱 hot
短信服务
日志服务 SLS
内容安全
SSL 证书
号码隐私保护
实时计算 Flink 版
堡垒机
消息队列 Kafka
数据库审计
核心产品  :
DDoS 防护 hot
WEB应用防火墙 hot
SSL 证书
云防火墙
漏洞扫描
CDN
渗透测试
游戏盾
企业应用  :
网站建设 hot
企业网站定制 hot
小程序云
短信服务

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

发布时间:2020-12-10 14:28:28

  类属性与实例属性

  类属性便是类对象所享有的属性,它被全部类对象的实例对象所共有,在内存中只存有一个副本。

  在前面的实例中大家接触到的便是实例属性(对象属性),它不被全部类对象的实例对象所共有,在内存中的副本数量关键在于对象数量。

  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)

  类方法与静态方法类方法是类对象所享有的方式,还要用修饰器相同以@classmethod来标识其为类方法,

  br/>类方法是类对象所享有的方式,还要用修饰器相同以@classmethod来标识其为类方法,

  (cls是形参,可以修改为其余变量名,但最好用'cls'了)

  2).可以按照实例对象和类对象去访问。类方法与静态方法

  静态方法还要用修饰器相同以@staticmethod来标识其为静态方法,

  br/>类方法与静态方法

  静态方法还要用修饰器相同以@staticmethod来标识其为静态方法,

  2).可以按照实例对象和类对象去访问。

  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属性的定义和调用要留意一下几个方面:

  1.定义时,在实例方法的基本上填加@property装饰器;而且仅有一个self参数

  2.调用时,无需括号

  类属性使用要求:针对京东商城中展示电脑主机的列表页面,每一次请求不太可能把数据库

  中的全部内容都展示到页面上,反而是按照分页的功能局部展示,故此在向数据库中请求

  数据时就需要展示的特定获得从第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)


产品问题、配置报价、售后请添加微信客服
产品使用问题、技术团队微信学习交流群(实时更新)