静态属性

在类中函数前加@property,在实例调用函数时无需加(),将函数属性封装,调用时看起来与数据属性类似

将函数封装成数据属性的形式,外部调用时看不到逻辑,静态属性可以访问实例属性也可以访问类属性

class House:

    def __init__(self,name,owner,width,length,height):
self.name=name
self.owner=owner
self.width=width
self.length=length
self.height=height @property
def cal_area(self):
return self.width*self.length H1=House('御景','我',100,100,100)
H2=House('峰景','她',50,50,50)
print(H1.cal_area)
print(H2.cal_area)

类方法

与实例区分开,为了满足只调用类方法,与实例无关;在方法前加@classmethod

类方法只给类使用(不论是否存在实例),只能访问实例变量

class Room:
tag=1
@classmethod
def tell_info(cls):
print(cls.tag) Room.tell_info()

静态方法

与类和实例都不绑定的方法,在方法前加@staticmethod,称作类的工具包

静态方法名义上归属类管理,不能使用类变量和实例变量,是类的工具包

静态方法不能访问类属性,也不能访问实例属性

class Room:
tag=1 @staticmethod
def bath(a,b):
print('%s%s在洗澡'%(a,b)) Room.bath('a','b')

组合

用来实现类与类之间的关联

class School:
def __init__(self,name,addr):
self.name=name
self.addr=addr class Course:
def __init__(self,name,price,school):
self.name=name
self.price=price
self.school=school s1=School('oldboy','Beijing') c1=Course('linux','',s1) print(c1.school)
print(c1.school.addr)
class School:
def __init__(self,name,addr):
self.name=name
self.addr=addr class Course:
def __init__(self,name,price,school):
self.name=name
self.price=price
self.school=school s1=School('old','Beijing')
s2=School('old2','Nanjing')
s3=School('old3','Dongjing') c1=Course('linux','',s1) msg='''
1 oldman 北京校区
2 oldman 南京校区
3 oldman 杭州校区
''' menu={
'':s1,
'':s2,
'':s3
} while True:
print(msg)
choice = input('请输入选择校区>>>')
school_obj=menu[choice]
name=input('请输入课程名>>>')
course_obj=Course(name,1000,school_obj)
print('%s课程是%s学校的'%(course_obj.name,course_obj.school.name))

 

 继承:

类的继承与生活中的父、子、孙子继承关系一样,父类又称基类。

python中的继承分为单继承和多继承

子类实例调用方法时会优先调用自身类的方法,找不到再找继承基类中方法,子类中方法与父类方法名相同时,相当于重新声明,原则上不是覆盖,与函数的作用域类似。

class Parent1:
pass class Parent2:
pass class son1(Parent1):
pass class son2(Parent1,Parent2):
pass

1.当类之间有显著不同,且较小的类是较大的类的所需要的组件时,用组合比较好。

例:人的手类、脚类、头类

2.当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好。

例:男人可以:吃饭、睡觉、打豆豆

  女人可以:吃饭、睡觉、打豆豆

继承的两种含义:

1.继承基类方法,并且做出自己的改变或者扩展(代码重用),该方式有一定缺点,会使子类与基类耦合。

2.声明某个子类兼容于某基类,定义一个接口类,子类继承接口类,并且实现接口类中定义的方法,接口继承实质上是要求“做出一个良好的抽象,这个抽象规定了一个兼容接口,使得外部调用者无需关心具体细节,可一视同仁的处理实现了特定接口的所有对象”-----这叫做归一化。通俗来讲,就是规定子类必须实现父类中抽象的方法,否则无法实例化。需导入abc模块

import abc

class Parent(metaclass=abc.ABCMeta):
@abc.abstractmethod
def read(self):
pass @abc.abstractmethod
def write(self):
pass class son(Parent):
def read(self):
print('')
def write(self):
print('') s1=son()

继承顺序:

__mro__方法可查看继承顺序

子类中继承父类方法

方法一:

class Vehicle:
def __init__(self,name,speed,load):
self.name=name
self.speed=speed
self.load=load def run(self):
print('run') class Subway(Vehicle):
def __init__(self,name,speed,load,line):
Vehicle.__init__(self,name,speed,load)
self.line=line def run(self):
Vehicle.run(self)
print('%s line %s run '%(self.name,self.line),self.speed,self.load) S1=Subway('Wuhan','100km/h',1000,'')
S1.run()

方法二:
super().__init__()方法,可以无需写父类名,无需传self参数

class Vehicle:
def __init__(self,name,speed,load):
self.name=name
self.speed=speed
self.load=load def run(self):
print('run') class Subway(Vehicle):
def __init__(self,name,speed,load,line):
super().__init__(name,speed,load)
self.line=line def run(self):
super().run()
print('%s line %s run '%(self.name,self.line),self.speed,self.load) S1=Subway('Wuhan','100km/h',1000,'')
S1.run()

1

python_14 静态属性、类方法、静态方法;组合;继承的更多相关文章

  1. python - class类 (二) 静态属性/类方法/静态方法

    静态属性: #静态属性 = 数据属性 (@property) class mianji(): def __init__(self,x,y): self.x = x self.y = y #类的函数方法 ...

  2. python的类的 静态属性 类方法 静态方法

    一.静态属性 静态属性说的就是数据属性 1.定义一个房间的类,求下这个房间的面积 class Room: def __init__(self,name,ower,width,length,heigh) ...

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

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

  4. PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

      前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象 ...

  5. PHP static静态属性和静态方法

    这里分析了php面向对象中static静态属性和静态方法的调用.关于它们的调用(能不能调用,怎么样调用),需要弄明白了他们在内存中存放位置,这样就非常容易理解了.静态属性.方法(包括静态与非静态)在内 ...

  6. php面向对象中static静态属性和静态方法的调用

    这篇文章主要介绍了php面向对象中static静态属性和静态方法的调用,实例分析了static静态属性和静态方法的原理与调用技巧,需要的朋友可以参考下 本文实例讲述了php中static静态属性和静态 ...

  7. php静态属性和静态方法

    php静态属性和静态方法 2012-09-29 10:18 1518人阅读 评论(0) 收藏 举报 phpfunction 本php教程主要是学习php中静态属性和静态方法的使用方法和基本的示例. · ...

  8. static静态属性和静态方法的原理与调用技巧

    这篇文章主要介绍了php面向对象中static静态属性和静态方法的调用,实例分析了static静态属性和静态方法的原理与调用技巧,需要的朋友可以参考下     本文实例讲述了php中static静态属 ...

  9. PHP使用static关键字声明静态属性和静态方法

    PHP使用static关键字声明静态属性和静态方法 在PHP中,通过static关键字修饰的成员属性和成员方法被称为静态属性和静态方法. 静态属性和静态方法不需要在被类实例化的情况下就可以直接使用. ...

  10. java中静态变量与静态方法的继承(转)

    总结: 1.静态变量与静态方法说继承并不确切,静态方法与变量是属于类的方法与变量.而子类也属于超类,比如说Manage extends Employee,则Manage也是一个Employee,所以子 ...

随机推荐

  1. 经典问题----拓扑排序(HDU2647)

    题目简介:有个工厂的老板给工人发奖金,每人基础都是888,工人们有自己的想法,如:a 工人想要比 b 工人的奖金高,老板想要使花的钱最少 那么就可以 给b 888,给a 889 ,但是如果在此基础上, ...

  2. python入门——热量转换 I

    热量转换 I 描述 卡路里,简称卡(Calorie),缩写为cal,定义为在1个大气压下,将1克水提升1摄氏度所需要的热量,卡是能量单位,被广泛使用在营养计量方面.国际能量标准单位是焦耳(joule) ...

  3. Setting

    http://www.cnblogs.com/felixwang2/p/8798653.html

  4. PythonStudy——Global关键字

    # 作用:将局部的变量提升为全局变量# 1.全局没有同名变量,直接提升局部变量为全局变量# 2.有同名全局变量,就是统一全局与局部的同名变量# -- 如果局部想改变全局变量的值(发生地址的变化),可以 ...

  5. day-11函数的形参与实参

    形参与实参 参数介绍: 函数为什么要有参数:因为内部的函数体需要外部的数据 怎么定义函数的参数:在定义函数阶段,函数名后面()中来定义函数的参数 怎么使用函数的参数:在函数体中用定义的参数名直接使用 ...

  6. vs编码对编译的影响(UTF-8 no BOM编译通不过)

    VS的编译器对Unicode源代码支持如下: UTF-16 little endian with or without byte order mark (BOM). UTF-16 big endian ...

  7. Day 22 初识面向对象

    一.两种编程思想 1.面向过程编程 核心是'过程',过程指的是解决问题的步骤,就是先干什么再干什么 基于面向过程思想编写程序相当于写一条流水线,是一种机械式的思维方式 优点:解决问题的思路清晰,可以把 ...

  8. [转]CPU-bound(计算密集型) 和I/O bound(I/O密集型)

    转自:http://blog.csdn.net/q_l_s/article/details/51538039 I/O密集型 (CPU-bound) I/O bound 指的是系统的CPU效能相对硬盘/ ...

  9. 线程中AutoResetEvent与ManualResetEvent的区别

    线程之间的通信是通过发信号来进行沟通的.. ManualResetEvent发送Set信后后,需要手动Reset恢复初始状态.而对于AutoResetEvent来说,当发送完毕Set信号后,会自动Re ...

  10. 利用Clang(Python接口)来解析C++

    1 背景说明 最近希望利用开源库来解析C++头文件,并做一些自动翻译.自动注释之类的工作.经过两天的调研,发现clang最有希望满足需求.clang提供了三套接口来共外部使用,liblang最适合作为 ...