day07面向对象进阶

类.__init__查看对象的函数属性

类.__dict__查看类的属性对象

定义在类内部的变量,是所有对象共有的,id相同

定义在类内部的函数,是绑定在所有对象上,给对象用的obj.func()就会吧obj传到func(obj)

类内部的方法都是绑定方法,绑定到对象上

绑定方法(类绑定,对象绑定),非绑定方法

面向对象的特性

类与对象

对象是特征(变量)与技能(函数)的结合

类是一系列对象共有的特征和技能

现实中,先有对象,再总结归纳出类,程序中,先定义类再实例化对象

类的第一种用法,实例化

第二种用法,属性引用

继承与多态

继承

“是”的关系,可以用继承来消除代码冗余

人是动物,猪是动物,狗是动物

类的括号写的是被继承的类

继承顺序,在python2中有经典类和新式类,python3中只有新式类,新式类继承顺序

新式类继承顺序:D->C->B->E->F->G->A

继承可以是变量可以是方法,对象本身没有的变量或者方法去父类中找,父类没有去object中找。

组合

也可以解决代码容易,是什么“有”什么的关系

class teacher:

def __init__(self,name,age,year,mon,day):

self.name = name

self.age = age

self.birth1 =
birth(year,mon,day)

class birth:

def __init__(self,year,mon,day):

self.year = year

self.mon = mon

self.day = day

def tell(self):

print("%s-%s-%s"
%(self.year,self.mon,self.day))

t=teacher("dodo",18,1990,8,12)

print(t)#<__main__.teacher
object at 0x00000000006C1DA0>

print(t.name)#dodo

print(t.birth1)#<__main__.birth object at 0x00000000006C1DD8>

t.birth1.tell()#1990-8-12

模拟接口

在类里面定义需要实现的功能,在实例中实现

class File():

#    
def read(self):#pass

#    
#方法一:主动抛异常,让实例实现read功能

#        
raise TypeError("类型错误")#主动抛异常,只有子类重写才不会抛异常

#    
#方法二:强行实现功能,抽象类

抽象类

import abc

class File(metaclass = abc.ABCMeta):

@abc.abstractmethod

def read(self):  pass

@abc.abstractmethod

def talk(self):pass

class word(File):

def read(self):

print("read")

def talk(self):

print("talk")

p=word()#

多态

同一种事物的多种形态,类的子类。

多态性:具有不同功能的函数可以使用相同的函数名

如:父类的函数,在子类重写

封装

绑定方法和非绑定方法

绑定方法:可以自动传值

只要在类内部定义,没有任何修饰,就是对象的绑定方法,把对象当做第一个参数传入方法

用@classmethod是类绑定方法,把类当做第一个参数传入方法体

非绑定方法

用@staticmethod修饰的类内部的方法就是非绑定方法,就是一个普通工具

"""

绑定方法和非绑定方法

"""

class Foo:

def test1(self):

pass

@classmethod

def test2(cls):

pass

@staticmethod

def test3():

pass

p = Foo()

print(p.test1)

print(Foo.test2)

print(p.test3)

"""

<bound method Foo.test1 of <__main__.Foo object at
0x0000000000AB1D30>>

<bound method Foo.test2 of <class ‘__main__.Foo‘>>

<function Foo.test3 at 0x0000000000AB3598>

"""

反射

通过字符串的方式寻找类中的属性

class people:

country = ‘chinese‘

def __init__(self,name,age):

self.name = name

self.age = age

p = people("egon",10)

查询

# print(hasattr(p,‘name‘))#类中有没有name属性

增加

# setattr(p,‘x‘,123)#设置属性值

# print(p.__dict__)#{‘x‘: 123, ‘age‘: 10, ‘name‘: ‘egon‘}

获取

# print(getattr(p,‘name‘))#egon

# print(getattr(p,‘x‘,"not exist"))#not exist

# #或者

# if hasattr(p,‘x‘):

#     res = getattr(p,‘x‘)

#     print(res)

删除

print(people.__dict__)#country

print(p.country)

delattr(people,‘country‘)

print(people.__dict__)#country

时间: 2024-11-05 20:37:07

day07面向对象进阶的相关文章

Python之路【第八篇】:Python基础(24)——面向对象进阶

参考连接: Python 面向对象(初级篇) http://www.cnblogs.com/wupeiqi/p/4493506.html python 面向对象(进阶篇) http://www.cnblogs.com/wupeiqi/p/4493506.html python 面向对象及相关 http://www.cnblogs.com/wupeiqi/articles/5017742.html 面向对象进阶: 类成员之字段.方法.属性: 类成员修饰符: 类成员之特殊成员 1.类方法 普通的方法

2Python全栈之路系列之面向对象进阶及类成员

Python全栈之路系列之面向对象进阶及类成员 再次了解多继承 先来一段代码 #!/usr/bin/env python # _*_ coding:utf-8 _*_ class A:     def bar(self):         print("BAR")         self.f1()          class B(A):     def f1(self):         print("B")          class C:     def 

Python【day7】:Python学习(面向对象进阶、反射、socket介绍)

面向对象进阶 1.类变量和实例变量 # 一.变量 # 变量包括:实例变量和类变量, # 他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, # 实例变量属于对象 # 类变量属于类 class Province(object): country = "中国" #类变量 def __init__(self, name): self.name = name # 实例变量 # 直接访问实例变量(实例名来调用) obj = Province('河北省') print(obj.na

Python面向对象进阶和socket网络编程-day08

写在前面 上课第八天,打卡: 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __init__(self,name): self.name=name p = Chinese('standby') # 实例化一个对象 print(p) # 打印这个对象 --- <__main__.Chinese object at 0x0000000000B3A978> - 示例2: >&g

python面向对象进阶版

面向对象基础知识: 1.面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用: 2.类是一个模板,模板中包装了多个'函数'供使用(可以将多函数中公用的变量封装到对象中): 3.对象,根据模板创建的实例(即:对象),实例用于被包装在类中的函数: 4.面向对象三大特性:封装.继承和多态. 面向对象进阶篇详细介绍python类的成员.成员修饰符和类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存

10、python全栈之路-面向对象进阶

十.面向对象进阶 http://www.cnblogs.com/Eva-J/articles/7351812.html 1.isinstance和issubclass 1.1 isinstance(obj,cls) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1.2 issubclass(sub, super) issubclass(sub, super)检查sub类是否是 super 类的派生类 2.反射 #把一个字符串数据类型的变量变成一个真实存在在这个程序

python(24)- 面向对象进阶

面向对象基础知识: 1.面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用: 2.类是一个模板,模板中包装了多个‘函数’供使用(可以将多函数中公用的变量封装到对象中): 3.对象,根据模板创建的实例(即:对象),实例用于被包装在类中的函数: 4.面向对象三大特性:封装.继承和多态. 面向对象进阶篇详细介绍python类的成员.成员修饰符和类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存

Python之面向对象进阶

Python之面向对象进阶 进阶有:Python 类的成员.成员修饰符.类的特殊成员. 一.类的成员 类的成员可以分为三大类:字段.方法和属性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的多少,在内存中只创建一份. 1.字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类 1 class Province:

Python基础-面向对象进阶

面向对象进阶 一 类中的装饰器方法  classmethod staticmethod property 1.1 property 一般情况下,方法都是动词.指某一类事物的动作 在计算圆形的周长和面积的时候,他们应该是圆形的属性,但是这里确是一个方法.这不符合python面向对象(能够完全区分属性和方法)的理念. 所以我们可以用一个装饰器去将一个属性性质的函数,装饰成一个属性.可以以调用属性的方式去调用他. from math import pi class Circle: def __init