类的进阶
Posted alben-xue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类的进阶相关的知识,希望对你有一定的参考价值。
类的三大特性
1,封装
2,继承
3,多态
为什么需要类!
运用“类”和“对象”的编程方法,叫做OOP(面向对象)
为什么要OOP!
开发的基本原则:
1,避免重复代码的调用
2,代码易读性,扩展性
“类”的成员:
字段
普通字段
静态字段
方法
普通方法
类方法
静态方法
属性
普通属性
一、字段
普通字段与静态字段的区别:
静态字段属于“类”
普通字段属于“对象”
代码中的体现:
class Province: country = "China" def __init__(self,name): self.name = name p1 = Province("JiangSu") p2 = Province("HeBei") print(p1.name,p1.country) print(p2.name,p2.country)
如果一个字段是所有对象共享的,那么这个字段建议用静态字段,
why?
内存消耗的问题,
静态字段保存在类中,n个对象共享一个内存地址
普通字段保存在对象中,一个对象就需要占用一个内存字段
二,方法
普通方法:由“对象”调用;至少一个“self”参数;执行普通方法时,自动将调用该方法的对象赋值给self;
类方法:由“类”调用,至少一个“cls”参数,执行类方法时,自动将调用该方法的“类”复制给cls;
静态方法:由“类”调用,无默认参数
这三种方法在内存中都属于类!
代码:
class Foo: def __init__(self,name): self.name = name def ord_func(self): ‘‘‘定义普通方法,所以必须要self参数‘‘‘ print("普通方法") @classmethod def class_func(cls): ‘‘‘定义类方法,至少有一个cls参数‘‘‘ print("类方法") @staticmethod def static_func(): ‘‘‘定义静态方法,无默认参数‘‘‘ print("静态方法") #生成对象 f = Foo(‘abc‘) #调用普通方法 f.ord_func() #调用类方法 Foo.class_func() #调用静态方法 Foo.static_func()
三,属性
属性其实就是“普通方法”的变种!
属性的基本使用:
class Goods: @property def price(self): print ("alben") obj = Goods() 调用属性 result = obj.price
属性的定义与调度注意点:
1,在普通方法的基础上,添加装饰器@property
2,定义时只需要一个“self”参数
3,调用时不需要括号“()”
例:
数据库中保存了大量主机列表,在读取的时候一般都是分页读取的,每一页显示条目数量固定,这样就需要给定每次读取是从第几条开始,第几条结束。
class Page: def __init__(self,current_page): self.current_page = current_page self.items = 10 @property def start(self): value = (self.current_page - 1) * self.items return value @property def end(self): value = self.current_page * self.items return value p1 = Page(10) p1.start p2.start
以上是关于类的进阶的主要内容,如果未能解决你的问题,请参考以下文章
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段
我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段
我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段