面向对象进阶一

一、利用反射查看面向对象成员归属

反射:以字符串的形式去对象(模块)中操作成员

记住点:

1)反射如果查看对象:可以找对象,也可以找类的成员

2)反射查看类:只能找类的成员

如下代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-
class Foo:
    def __init__(self,name):
        self.name = name
    def show(self):
        print("show")
obj = Foo("a")
F = hasattr(obj,"name")
print(F)
F = hasattr(obj,"show")
print(F)
r = hasattr(Foo,"name")
print(r)
F = hasattr(obj,"name")
print(F) 

aa

执行True True False True

二、利用反射导入模块、查找类、创建对象、查找相应的字段

问题:如何去一个模块中调用或者查看成员?

下面就是例子

#!/usr/bin/env python
# -*- coding:utf-8 -*-
class Foo:
    def __init__(self,name):
        print("xxx")
        self.name = name
    def show(self):
        print("show")

BB

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#导入模块
m = __import__("BB",fromlist=True)
#利用反射去模块中找类
class_name = getattr(m,"Foo")
#根据类创建对象
obj = class_name("hello")
#根据反射去对象中找到相应的值
val = getattr(obj,"name")
print(val)

CC

上述流程:首先找到m模块,之后找到Foo这个类,创建一个class_name这个对象,然后利用反射找到对应的值

三、静态字段、普通字段、静态方法、类方法、特性

静态字段的意义:将对象中保存的重复的数据存放在类中

静态字段封装的是类的数据

普通字段封装的是对象的数据

所以类调用静态字段

对象调用普通字段

 1 class Provice1:
 2     #静态字段
 3     country = "中国"
 4     #这是对象里面的东西
 5     def __init__(self,name):
 6         #普通字段
 7         self.name = name
 8     def show(self):
 9         print( "show")
10     #类方法:特点参数传递的是类名
11     @classmethod
12     def xxoo(cls):
13         print(‘xxoo‘,cls)
14     #静态方法
15     @staticmethod
16     def xo(arg1,arg2):
17         print("xo")
18 obj = Provice("a")
19 Provice1.xo(1,2)
20 Provice1.xxoo()
21 obj.xo(1,2)

@staticmethod  装饰函数就是静态方法

@classmethod  装饰函数 叫做类方法,类方法中参数必须有cls(cls参数传递的就是类名)

Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的:

1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数;

2)从第1条,静态方法是无法访问实例变量的,而类成员方法也同样无法访问实例变量,但可以访问类变量;

3)静态方法有点像函数工具库的作用,而类成员方法则更接近类似Java面向对象概念中的静态方法。

特性:

1、@property   将方法为造成一种字段

2、和1中的方法名一样的函数名.setter 获取上面的字段,然后修改内存中的数据

那怎么用呢?

下面代码:

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 class Provice1:
 4     #静态字段
 5     country = "中国"
 6     #这是对象里面的东西
 7     def __init__(self,name):
 8         #普通字段
 9         self.name = name
10     @property #特性:将方法伪造成一种字段
11     #获取字段
12     def end(self):
13         tmp = "%s sb"%self.name
14         return tmp
15     #设置字段
16     @end.setter
17     def end(self,value):
18         print(value)
19         self.name = value
20 obj = Provice1("a")
21 #获取字段
22 print(obj.end)
23 #设置字段
24 obj.end = "123"
25 print(obj.end)

上面执行顺序:

首先执行end函数,设置end函数为123,也就是把123传入给value,然后执行17行的end函数输出123.sb

时间: 2024-10-02 04:26:10

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

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

~~面向对象进阶:类方法~~

进击のpython 面向对象进阶-类方法 classmethod 类方法 python的类方法是通过@classmethod装饰器实现的 类方法和普通的方法的区别是 类方法只能访问类变量,不能访问实例变量 class Dog(object): def __init__(self, name): self.name = name @classmethod def eat(self): print("%s is eating" % self.name) d = Dog("Mjj&