python面向对象之静态属性/静态方法/类方法/组合
继续学习,不要松懈
#!/usr/bin/env python
# coding:utf-8 class Campus: def __init__(self,name,addr,type):
self.Name = name
self.Addr = addr
self.Type = type def details(self):
print("学样的详细信息, 名称:%s 地址:%s 类型:%s" %(self.Name,self.Addr,self.Type) ) c1 = Campus("南京大学","江苏南京","")
print(c1.__dict__)
print(Campus.__dict__) # 注意实例字典与类的字典的区别 c1.details()
Campus.details(c1) # 使用类去调用方法时,需要传入具体的实例参数 #### 也推荐看看廖雪峰的教程: https://www.bilibili.com/video/av3803706?from=search&seid=6691387782253130457 #####
class Room:
clr = '可选的,默认白色'
def __init__(self,name,owner,width,length,height):
self.name = name
self.owner = owner
self.width = width
self.length = length
self.height = height def area(self):
return self.width * self.length @property # 此装饰器就是负责把一个方法变成静态属性调用
def space(self):
return self.width * self.length * self.height @classmethod # 供类使用的方法,虽然实例也可以调用
def colour(cls): # 此 cls 表示自动传递类名作为参数
print("房间的色彩是",cls.clr) @staticmethod # 比喻为类的工具包. 只是名义上的归属类管理,不能使用类变量和实例变量
def round(a,b):
print("地板使用%s或%s"%(a,b)) ## 静态属性既可以访问实例属性,又可以访问类的属性
## 类方法 不能访问到实例的属性
## 静态方法 不能访问类的属性,也不能访问实例的属性
# self跟实例绑定, cls跟类绑定, @staticmethod 跟谁都不绑定 r1 = Room('公寓','alex',9,9,2)
r2 = Room('house','jerry',12,13,5) print(r1.area())
print(r2.area()) print("空间:",r1.space) # 调用方法不一样了,省掉括号
print("空间:",r2.space) # @property的好处是封装一个属性, 使用时完全感知不到背后的逻辑 Room.colour() # 跟实例没有关系,只是类调用自己的函数. 类级别的操作. Room.round('木板','瓷砖')
r1.round("牛皮","水泥") # 类或实例都可以调用 ## 学着学着感觉到累了, 就去B站找了下以前喜欢的视频:
## 砖家 "你不知道的西游记" https://www.bilibili.com/video/av3803706?from=search&seid=6691387782253130457
## 这个系列的解说真是精彩, 以前在UKu上看过, 强力推荐给刚入社会的年轻人们看看.
组合:
#!/usr/bin/env python
# coding:utf-8 # class Hand:
# pass
#
#
# class Foot:
# pass
#
# #
# class Trunk:
# pass
#
#
# class Head:
# pass
#
#
# class Person:
# def __init__(self, id_num, name):
# self.id_num = id_num
# self.name = name
# self.hand = Hand() # 使用小类的实例化
# self.foot = Foot()
# self.trunk = Trunk()
# self.head = Head()
#
#
# p1 = Person('111111', 'alex')
# print(p1.__dict__) # ## 类的组合:组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合
# ## 参考: http://www.cnblogs.com/linhaifeng/articles/7340153.html
class School:
def __init__(self,name,addr):
self.name = name
self.addr = addr class Course:
def __init__(self,name,price,period,school):
self.name = name
self.price = price
self.period = period
self.school = school class Teacher:
def __init__(self,name,age,gender,):
self.name = name
self.age = age
self.gender = gender s1 = School("Mooc",'北京')
s2 = School("Mooc",'上海')
s3 = School("Mooc",'线上') msg = '''
1 xx学院 新校区
2 xx学院 老校区
3 xx学院 网络校区
''' while True:
print(msg)
menu={
'':s1,
'':s2,
'':s3
}
choice = input("选择学校:")
school_obj = menu[choice] n_name = input("课程名:")
n_price = input("课程价格:")
n_period = input("课程周期:") new_course= Course(n_name,n_price,n_period,school_obj)
print("课程[%s]属于[%s]学校,费用[%s]" %(new_course.name,new_course.school.name,new_course.price))
虽然这些都是小练习,与实际生产还有很大差距,但是没有这些练习的熟练掌握,怎么能玩转实际生产呢?
继续!
抽象类与接口练习:
#!/usr/bin/env python
# coding:utf-8 import abc #利用abc模块实现抽象类(没错,就叫abc) class All_file(metaclass=abc.ABCMeta): # 定义成基类
@abc.abstractmethod # 用装饰器的方式定义抽象方法,无需实现功能
def read(self):
pass # 基类方法不用实现 子类必须定义功能
@abc.abstractmethod
def write(self):
pass ## 接口继承:就是定义了一个父类,规定了所有的子类必须实现父类的方法,但是父类不实现。并不是为了节省代码 ## 子类继承时必须实现具体地实现基类规定的方法,不实现就办法实例化
class Disk(All_file):
def read(self):
print("disk read") def write(self):
print("disk write") class Mem(All_file):
def read(self):
print("mem read") def write(self):
print("mem write") class cdrom(All_file):
def read(self):
print("cd read") def write(self):
print("burn cd") cd1 = cdrom() # 如果 cdrom没有去实现write方法,实例化时就会报错 ''' 参考: http://www.cnblogs.com/linhaifeng/articles/7340153.html 抽象类与接口 抽象类的本质还是类,指的是一组类的相似性,包括数据属性(如all_type)和函数属性(如read、write),而接口只强调函数属性的相似性。 抽象类是一个介于类和接口直接的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计
'''
python面向对象之静态属性/静态方法/类方法/组合的更多相关文章
- 面向对象:静态属性,静态方法,组合,继承,衍生,继承之mro线性顺序列表,面向对象综合实例
1.静态属性(附有装饰器) class Room: def __init__(self,name,owner,width,length,height): self.name=name self.own ...
- day25、 静态属性、类方法、静态方法、组合、继承、
一. 静态属性.类方法.静态方法 1.1静态属性 class Room: def __init__(self,name,owner,width,length): self.name=name self ...
- Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass
Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...
- python之静态属性、类方法、静态方法
静态属性.类方法.静态方法 1. 静态属性:在函数前加@property,将函数逻辑”封装“成数据属性,外部直接调用函数名,如同调用属性一样.这个函数是可以调用类和实例的属性的, 静态属性的作用 ...
- typescript静态属性,静态方法,抽象类,多态
/* 1.vscode配置自动编译 1.第一步 tsc --inti 生成tsconfig.json 改 "outDir": "./js", 2.第二步 任务 ...
- python_14 静态属性、类方法、静态方法;组合;继承
静态属性 在类中函数前加@property,在实例调用函数时无需加(),将函数属性封装,调用时看起来与数据属性类似 将函数封装成数据属性的形式,外部调用时看不到逻辑,静态属性可以访问实例属性也可以访问 ...
- Python——面向对象,类属性,静态方法,类方法
一.类属性 """类属性(Class attribute) 定义:类对象所拥有的属性,被该类的所有实列对象所共有 类对象和实例对象皆可访问类属性 应用条件:记录的某项数据 ...
- Python - 面向对象编程 - 实例方法、静态方法、类方法
实例方法 在类中定义的方法默认都是实例方法,前面几篇文章已经大量使用到实例方法 实例方法栗子 class PoloBlog: def __init__(self, name, age): print( ...
- python面向对象(类的成员及类方法)
类的普通成员 字段 方法 属性 类的高级成员 静态字段 静态方法 属性方法 类方法 类成员修饰符 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中, ...
随机推荐
- Spring Boot属性文件配置文档(全部)
This sample file is meant as a guide only. Do not copy/paste the entire content into your applicatio ...
- 复杂的xml资源
某些资源类型是由XML文件表示的多个复杂资源的组合.例子是一个animated vector drawable,它是一个封装了vector drawable和动画的drawable资源.这需要使用至少 ...
- 九度1456胜利大逃亡【BFS】
时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:4432 解决:1616 题目描述: Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会.魔王住在一个城堡 ...
- java 形式参数和实际参数的区别
1.形参不能离开方法.形参只有在方法内才会发生作用,也只有在方法中使用,不会在方法外可见.而实参可以再程序的任何地方都使用.
- laravle 整合 thrift
1,安装thrift https://www.cnblogs.com/sunlong88/p/9965522.html 2,生成 RPC文件 thrift -r --out ./app --gen p ...
- ie11兼容
项目里遇到ie11的问题, 1.控制台报:SCRIPT7002: XMLHttpRequest: 网络错误 0x80070005, 拒绝访问. 后来发现是由于传参过长,不应该用get请求,后改成pos ...
- Ajax如何实现从前端不刷新页面就可以到后端取到数据
提到axaj很多人总说很难,什么回调函数呀等等就让人心烦,其实懂得ajax在js里面是如何实现向服务器请求数据的原理,那么理解ajax也就不是很难了,现在我们一起来看看. ajax作用:ajax技术的 ...
- Cognos命名空间不可用
1. 问题描述 启动Cognos失败,报错代码为0146. 2. 问题分析 namespace 配置有问题,检查configuration 3. 解决方案 如果检查不出问题,删除$COGNOS_HOM ...
- django虚拟环境安装
虚拟环境主要是防止不同版本的模块之间的冲突,维护多个项目的时候这个非常重要. 虚拟环境的安装 sudo apt install python-virtualenv 虚拟环境安装成功后,直接创建一个虚拟 ...
- git提交步骤
1,为了确定在本地分支下操作,可以用命令查看一下是否在本地分支 git branch 2,可以查看状态,是否添加了哪些内容 git status 3,如果确认无误,使用命令进行提交本地代码,并加上注释 ...