python面向对象的升华,析构方法,面向对象的特性,封装继承多态等介绍和简单运用。私有化属性等_听风无忧、落雪成眠的博客-程序员宅基地

技术标签: python    多态  设计模式  封装  

析构方法__del__() 对象被销毁 程序退出 作用域被释放

#析构方法
class Animal:
    def __init__(self,name):
        self.name=name
        print('构造初始化方法')
        pass
    def __del__(self):
        print('这是析构方法')
        pass
    pass
cat=Animal('small_cat')
print('aaa') 
# 构造初始化方法 aaa 这是析构方法
del cat #手动调用时 析构方法也会执行

封装 继承 多态

继承: 子类可以直接使用父类的方法

class Cat(Animal):  #cat子类继承animal父类   单继承
     pass
class dog(Eat,Drank) #多继承  
     pass
     super().__init(name,age) #自动调用父类方法
     Animal.__init(self,name,age) #手动调用

mro() :方法执行顺序

多态: 对不同子类对象有不同的行为表现,灵活性和扩展性

定义时类型与运行时类型不一样
两个前提: 1.继承 父类 子类之间 2.重写
类属性:就是类对象所拥有的属性
实例属性:实例对象拥有的属性
修改类属性 :类型.属性=‘aa’ Student.name=‘xiaowang’
类方法@classmethod和静态方法@staticmethod:
类方法 第一个参数是类对象 cls
静态方法 不需要参数

print('--------------')
class People:
    country='china'
    @classmethod  #类方法 第一个参数必须是类对象
    def get_country(cls):
        return cls.country #访问类属性
    @classmethod #类方法修改类属性
    def change_country(cls,data):
        cls.country=data
        pass
    @staticmethod #静态方法:主要来存放逻辑性的代码,本身没有交互 数据不会改变
    def getData():
        return People.country
    pass

print(People.get_country()) #通过类对象去引用
People.change_country('unit states')
print(People.country)
People.change_country('england')
p=People()
print(p.getData()) # 一般不会实例对象来访问类属性
import time
print(time.localtime())

私有化属性 :保存属性安全 属性以两个下划线开头 声明私有化 可以在类内部访问和修改

# 私有化属性
# 场景:把特定属性藏起来
        # 保护属性 不能随意改变  不让子类继承
class Person:
    __hobby='打篮球'
    def __init__(self):
        self.__name='李四' # 将此属性私有化 在类的内部可以访问
        self.age=18
        pass

xl=Person()
print(xl.name) # 类对象外部访问
# 私有化的实例属性 不能在外部直接访问 只可以在类内部随意使用
# 子类不能继承父类私有化属性
# 属性前加两个下划线直接私有化

私有化方法 :方法名前加两个下划线

def __eat(self):
    print("eat")
    pass

property属性函数 age=property(get_age,set_age)

class Person:
    def __init__(self):
        self.__age=18
        pass
    def get_age(self):
        return self.__age
    def set_age(self,age):
        if age < 0:
            print('输入错误')
            pass
        else:
            self.__age=age
            pass
    # 定义一个类属性 实现通过直接访问属性方式去访问私有属性
    age=property(get_age,set_age)
p1=Person()
print(p1.age) #使用get_age方法
p1.age=-1 #使用set_age方法
print(p1.age)

# 私有化属性
# 场景:把特定属性藏起来
        # 保护

装饰器修饰属性 @property @属性名.setter

# 装饰器修饰
class Person:
    def __init__(self):
        self.__age=18
        pass
    @property # 装饰器修饰 添加属性标志 提供一个getter方法
    def age(self):
        return self.__age
    @age.setter #  提供一个setter方法
    def age(self,parms):
        if parms < 0:
            print('输入错误')
            pass
        else:
            self.__age=parms
            pass
p1=Person()
print(p1.age)
p1.age=30
print(p1.age)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_45282709/article/details/117783213

智能推荐

[C/C++] 1015 德才论(25 分)_dulongxiang的博客-程序员宅基地

1015 德才论(25 分)宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”现给出一批考生的德才分数,请根据司马光的理论给出录取排名。输入格式:输入第一行给出 3 个正整数,分别为:N(≤ 105),即考生总数;L(≥60),为录取最低...

近义词搜索_fxnfk的博客-程序员宅基地

“西语”是“西班牙语”的简称,当我搜“西语”时,我希望搜索结果也包含“西班牙语”。 所以我要为分词器,加上一层过滤器,用于处理近义词。 分词的结果用TokenStream表示,一个TokenStream包含一串Token,每个Token表示一个分词,包含词的内容,在句子中的位置等。 近义词过滤器,要实现的是将同义词加入到TokenStream中,并且和原词是相同的位置。

linux怎么读_码农先锋A的博客-程序员宅基地_linux怎么读

微信设置水滴昵称,个性中带点萌/*凡是准备踏入Linux大门的叉子们(N年不关注了,不知道这个称呼是否还有),都必须经历疑问 那就是linux到底怎么读? 也许有些人很容易 什么里纽克斯 李纳克斯 随便称呼(毕竟发音也是自由的没有统一的标准) 但作为一个it业的newbie &amp; Perfectionist 不标准的发音给人感觉不专业,尽管最重要的干货是我掌握了多少Linux. 但是我认为这个一个态度问题.和在最初练习盲打一样.错误的习惯一旦养成就很难改正,为什么当初不坚持一下养成正确的好习惯.

setbackground_qq2227918581的博客-程序员宅基地_setbackgroundcolor参数

一、给View设置背景图片:(1)setBackground(Drawable background)button.setBackground(getResources().getDrawable(R.drawable.ic_launcher));(2)setBackgroundDrawable(Drawable background)button.setBackgroundDrawable(g...

SpringBoot拦截器-过滤器-监听器_胡安民的博客-程序员宅基地_springboot拦截器过滤器监听器

SpringBoot拦截器-过滤器-监听器过滤器应用场景过滤器可以简单理解为“取你所想取”,忽视掉那些你不想要的东西;1)过滤敏感词汇(防止sql注入)2)设置字符编码3)URL级别的权限访问控制4)压缩响应信息拦截器使用场景拦截器可以简单理解为“拒你所想拒” 关心你想要拒绝掉哪些东西,比如一个BBS论坛上拦截掉敏感词汇。拦截器本质上是面向切面编程(AOP),符合横切关注点的功能都可以放在拦截器中来实现,主要的应用场景包括:登录验证,判断用户是否登录。权限验证,判断用户是否有权限

剧透, 本届以太坊大会都有哪些牛逼的开发者……_区块链大本营的博客-程序员宅基地

记者 | 乔治出品 |CSDN、灵钛科技6月25-27日,由 ETHPLANET、CSDN、ETHFANS、LinkTime、橙皮书联合主办,UNITIMES、区块链大...

随便推点

iOS设备 历代 机型对照表_MaWenDong的博客-程序员宅基地_ios设备型号

-----------iPhone-----------iPhone 2,1(iPhone 3GS 产品型号:国行 - A1325;国际版 - A1303)iPhone 3,1(iPhone 4 GSM 产品型号:A1332)iPhone 3,2(iPhone 4 8G 新制程版,目前新出的国行 8G 版均为此型号,型号同为:A1332)iPhone 3, (iPhone 4 CDMA 产品型号:A1349 )iPhone 4,1(iPhone 4S 产品型号:A1387(电信版&amp;国际版)

Python3.x和Python2.x的区别_Chelseady的博客-程序员宅基地

1.性能 Py3.0运行 pystone benchmark的速度比Py2.5慢30%。Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可 以取得很好的优化结果。 Py3.1性能比Py2.5慢15%,还有很大的提升空间。 2.编码 Py3.X源码文件默认使用utf-8编码,这就使得以下代码是合法的:     &amp;gt;&amp;gt;&amp;gt; 中国 = 'china'     &amp;...

FPGA中的亚稳态及其解决办法_Castor0的博客-程序员宅基地

转自http://www.cnblogs.com/linjie-swust/archive/2012/01/07/YWT.html1. 应用背景1.1         亚稳态发生原因      在FPGA系统中,如果数据传输中不满足触发器的Tsu和Th不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery time)不满足,就可能产生亚稳态,此时触发器输出端Q...

JAVA-汉字拼音处理_H2oooooooooooooooooo的博客-程序员宅基地

1、依赖jar包maven仓库:&lt;repository&gt; &lt;id&gt;alimaven&lt;/id&gt; &lt;url&gt;http://maven.aliyun.com/nexus/content/groups/public/&lt;/url&gt;&lt;/repository&gt;GAV: &lt;depend...

流数据的Web界面配置_supermapsupport的博客-程序员宅基地

作者:doremi流数据服务(Streming Service)基于Spark Streaming分布式实时计算框架,因此在配置服务前,需要开启Spark集群。您可以使用iServer内置的Spark来搭建集群,也可以自行在其他的机器上搭建Spark集群服务,参考https://blog.csdn.net/supermapsupport/article/details/91973584,将S...

蓝桥杯——粘木棍 (C++)_JessieXW的博客-程序员宅基地

题目来源:蓝桥杯算法训练知识点:DFS搜索问题描述  有N根木棍,需要将其粘贴成M个长木棍,使得最长的和最短的的差距最小。输入格式  第一行两个整数N,M。  一行N个整数,表示木棍的长度。输出格式  一行一个整数,表示最小的差距样例输入3 210 20 40样例输出10数据规模和约定  N, M&lt;=7题目分析暴力法 思路:列举所有可能的组合,比较求最小差距。显然这种做法在计算过程中包含大量的重复计算,耗时较长。采用 DFS+穷举 的思路:每次选择两根木棍进行合