继续学习,不要松懈

#!/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面向对象之静态属性/静态方法/类方法/组合的更多相关文章

  1. 面向对象:静态属性,静态方法,组合,继承,衍生,继承之mro线性顺序列表,面向对象综合实例

    1.静态属性(附有装饰器) class Room: def __init__(self,name,owner,width,length,height): self.name=name self.own ...

  2. day25、 静态属性、类方法、静态方法、组合、继承、

    一. 静态属性.类方法.静态方法 1.1静态属性 class Room: def __init__(self,name,owner,width,length): self.name=name self ...

  3. Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass

    Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...

  4. python之静态属性、类方法、静态方法

    静态属性.类方法.静态方法 1. 静态属性:在函数前加@property,将函数逻辑”封装“成数据属性,外部直接调用函数名,如同调用属性一样.这个函数是可以调用类和实例的属性的,    静态属性的作用 ...

  5. typescript静态属性,静态方法,抽象类,多态

    /* 1.vscode配置自动编译 1.第一步 tsc --inti 生成tsconfig.json 改 "outDir": "./js", 2.第二步 任务 ...

  6. python_14 静态属性、类方法、静态方法;组合;继承

    静态属性 在类中函数前加@property,在实例调用函数时无需加(),将函数属性封装,调用时看起来与数据属性类似 将函数封装成数据属性的形式,外部调用时看不到逻辑,静态属性可以访问实例属性也可以访问 ...

  7. Python——面向对象,类属性,静态方法,类方法

    一.类属性 """类属性(Class attribute) 定义:类对象所拥有的属性,被该类的所有实列对象所共有 类对象和实例对象皆可访问类属性 应用条件:记录的某项数据 ...

  8. Python - 面向对象编程 - 实例方法、静态方法、类方法

    实例方法 在类中定义的方法默认都是实例方法,前面几篇文章已经大量使用到实例方法 实例方法栗子 class PoloBlog: def __init__(self, name, age): print( ...

  9. python面向对象(类的成员及类方法)

    类的普通成员 字段 方法 属性 类的高级成员 静态字段 静态方法 属性方法   类方法 类成员修饰符 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中, ...

随机推荐

  1. Error:Execution failed for task ':app:preDebugAndroidTestBuild'. > Conflict with dependency 'com.android.support:support-annotations' in project ':app'. Resolved versions for app (26.1.0) and test app

    出现的问题: Error:Execution failed for task ':app:preDebugAndroidTestBuild'.> Conflict with dependency ...

  2. oracle 存储过程循环打开游标数据处理

    2017-07-24 14:12:42 SQL内容: 1.一次性检索 100000 条数据. 2. 1000 条提交一次. 3.超过 100000 万条,重新打开游标,重新检索. pl/sql内容如下 ...

  3. 射频(SX1278)

    射频是什么? 官方说法:RF,Radio Frequency. (不懂的人,看了还是不懂,不过对于物联网行业的开发工程师.产品经理和项目经理,还是有需要对射频有个基础了解的.) 燚智能解读: 两个人, ...

  4. python 写文本文件出现乱码

    最近工作中想完善一下监控日志,同事说客户突然说我们最近几天推送的数据只有几家,赶紧看预警,应推4700多家,实推3400多家,用户可能是看错了,但我记得当时项目验收上线时,这个来源的推送数据肯定是可以 ...

  5. RobotFramework自动化测试框架-Selenium Web自动化(-)-Open Browser和Close Browser

    Selenium出来已经有很多年了,从最初的Selenium1到后来的Selenium2,也变得越来越成熟,而且也已经被很多公司广泛使用.Selenium发展的过程中,分了很多模块,这里我们主要介绍W ...

  6. .NET Core WEB API使用Swagger生成在线接口文档

    1项目引用Swashbuckle.AspNetCore程序集和Microsoft.Extensions.PlatformAbstractions程序集 右击项目打开"管理NuGet程序包.. ...

  7. scrapy框架使用笔记

    目前网上有很多关于scrapy的文章,这里我主要介绍一下我在开发中遇到问题及一些技巧: 1,以登录状态去爬取(带cookie) -安装内容: brew install phantomjs (MAC上) ...

  8. 关于lower_bound( )和upper_bound( )的常见用法

    lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的. 在从小到大的排序数组中, lower_bound( begin,end,num):从数 ...

  9. multiThread (一)

    并发系列(1)之 Thread 详解   阅读目录 一.线程概述 二.线程状态 三.源码分析 1. native注册 2. 构造方法和成员变量 3. start 方法 4. exit 方法 5. 弃用 ...

  10. vue整理

    安装 vue ui axios import axios from 'axios' // let curWwwPath = window.document.location.href // let p ...