python面向对象类的成员_python面向对象(二)——类成员

Python面向对象    类成员

1、字段

普通字段    属于对象

静态字段    属于类

2、方法

普通方法

触发者是对象    括号里至少一个参数 self = 当前对象 ,可以有多个参数

类方法

@classmethod   (cls=当前类)  触发者是类,用类直接调用,括号里只能有一个参数cls

对静态方法的约束,只能有一个参数,参数在传值的时候自动把当前类传入。单例模式时用到。

静态方法

属于类   @staticmethod   触发者类,括号里不需要参数(),也可以有多个参数

类加上静态方法=一个函数 。创建对象就可以访问方法,就像创建了函数。如果程序全部要求用面向对象做,而不用函数,静态方法才有用。

为什么要有类方法和静态方法?

因为如果没有这两种方法,在调用时就会先创建对象在去调用方法。而这两种方法都可以直接通过类来调用,节省的内存。

class foo():

def func(self):

print "This is common method"

@classmethod #类方法

def class_func(cls): #参数为cls

print "This is class method!!!"

@staticmethod #静态方法

def static_method():

print "This is static method!!"

obj = foo()

obj.func() #用对象直接调用普通方法

foo.class_func() #通过类来直接调用类方法

foo.static_method() #通过类来直接调用静态方法

3、属性

属性把一个方法伪造成一个字段、一个属性,像字段那样的属性而不是一个功能

定义时,在普通方法的基础上添加 @property 装饰器;

定义时,属性仅有一个self参数

调用时,无需括号

普通方法:foo_obj.func()

属性方法:foo_obj.prop

属性的两种定义方式

装饰器  即:在方法上应用装饰器

静态字段  即:在类中定义值为property对象的静态字段

装饰器方式:在类的普通方法上应用@property装饰器

经典类,具有一种@property装饰器(如上一步实例)

# ############### 定义 ###############

class Goods:

@property

def price(self):

return"wupeiqi"

# ############### 调用 ###############

obj = Goods()

result = obj.price # 自动执行 @property 修饰的 price 方法,并获取方法的返回值

新式类,具有三种@property装饰器

# ############### 定义 ###############

class Goods(object):

@property

def price(self):

print'@property'

@price.setter

def price(self, value):

print'@price.setter'

@price.deleter

def price(self):

print'@price.deleter'

# ############### 调用 ###############

obj = Goods()

obj.price # 自动执行 @property 修饰的 price 方法,并获取方法的返回值

obj.price = 123 # 自动执行 @price.setter 修饰的 price 方法,并将 123 赋值给方法的参数 del obj.price # 自动执行 @price.deleter 修饰的 price 方法

由于新式类中具有三种访问方式,我们可以根据他们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除

class Goods(object):

def__init__(self):

# 原价

self.original_price = 100

# 折扣

self.discount = 0.8

@property

def price(self):

# 实际价格 = 原价 * 折扣

new_price = self.original_price * self.discount

return new_price

@price.setter

def price(self, value):

self.original_price = value

@price.deltter

def price(self, value):

del self.original_price

obj = Goods()

obj.price # 获取商品价格

obj.price = 200 # 修改商品原价

del obj.price # 删除商品原价

静态字段方式,创建值为property对象的静态字段

当使用静态字段的方式创建属性时,经典类和新式类无区别

class Foo:

def get_bar(self):

return 'wupeiqi'

BAR = property(get_bar)

obj = Foo()

reuslt = obj.BAR # 自动调用get_bar方法,并获取方法的返回值

print reuslt

property的构造方法中有个四个参数

第一个参数是方法名,调用 对象.属性 时自动触发执行方法

第二个参数是方法名,调用 对象.属性 = XXX 时自动触发执行方法

第三个参数是方法名,调用 del 对象.属性 时自动触发执行方法

第四个参数是字符串,调用 对象.属性.__doc__ ,此参数是该属性的描述信息

class Foo:

def get_bar(self):

return'wupeiqi'

# *必须两个参数

def set_bar(self, value):

return 'set value' + value

def del_bar(self):

return'wupeiqi'

BAR = property(get_bar, set_bar, del_bar, 'description...')

obj = Foo()

obj.BAR # 自动调用第一个参数中定义的方法:get_bar

obj.BAR = "alex" # 自动调用第二个参数中定义的方法:set_bar方法,并将“alex”当作参数传入

del Foo.BAR # 自动调用第三个参数中定义的方法:del_bar方法

obj.BAE.__doc__ # 自动获取第四个参数中设置的值:description...

由于静态字段方式创建属性具有三种访问方式,我们可以根据他们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除

class Goods(object):

def__init__(self):

# 原价

self.original_price = 100

# 折扣

self.discount = 0.8

def get_price(self):

# 实际价格 = 原价 * 折扣

new_price = self.original_price * self.discount

return new_price

def set_price(self, value):

self.original_price = value

def del_price(self, value):

del self.original_price

PRICE = property(get_price, set_price, del_price, '价格属性描述...')

obj = Goods()

obj.PRICE # 获取商品价格

obj.PRICE = 200 # 修改商品原价

del obj.PRICE # 删除商品原价

python学习day20 面向对象(二)类成员&成员修饰符

1.成员 类成员 类变量 绑定方法 类方法 静态方法 属性 实例成员(对象) 实例变量 1.1实例变量 类实例化后的对象内部的变量 1.2类变量 类中的变量,写在类的下一级和方法同一级. 访问方法: ...

python 面向对象和类成员和异常处理

python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...

python 面向对象二 类和实例

一.类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法, ...

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

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

Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系

Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间 ...

Python 面向对象之一 类与属性

Python 面向对象之 类与属性 今天接触了一下面向对象,发现面向对象和之前理解的简直就是天壤之别,在学Linux的时候,一切皆文件,现在学面向对象了,so,一切皆对象. 之前不是一直在学的用面向函 ...

Python 入门 之 类成员

Python 入门 之 类成员 1.类的私有成员: 私有: 只能自己拥有 以 __ 开头就是私有内容 对于每一个类的成员而言都有两种形式: - 公有成员,在任何地方都能访问 - 私有成员,只有在类的内 ...

python面向对象二

1.1类的静态属性,类方法,类的静态方法 1.1.1静态属性(@property) 在类中: python内置的@property装饰器就是负责把一个方法(函数)变成属性来调用. class Stud ...

python面向对象与结构成员之间的关系

1面向对象结构分析:----面向对象整体大致分为两块区域:-------第一部分:静态字段(静态变量)部分-------第二部分:方法部分--每个区块可以分为多个小部分 class A: countr ...

随机推荐

SQL server 数据库备份还原Sql

/************ 一.数据库备份 ************/ --完整备份默认追加到现有的文件 backup database DBXS To disk='d:\backup\DBXS_fu ...

andriod 获取电池的信息

<?xml version="1.0"?>

oracle创建临时表没有权限

执行下面: grant create any table to 用户名称

ScalaTour-1&period;基础

import java.io.{BufferedReader, File, FileInputStream, InputStreamReader} import java.util import ja ...

武汉科技大学ACM :1004&colon; 零起点学算法74——Palindromes &lowbar;easy version

Problem Description “回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串.请写一个程序判断读入的字符串是否是“回文”. Input 输入包含多 ...

&lbrack;AngularJS&rsqb; Angular 1&period;5 multiple transclude

If you know ui-router, multi-transclude should be easy for you also. In previou Angular version < ...

选择29部分有用jQuery应用程序插件(免费点数下载)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值