python实例属性和类属性精讲

一:访问与改变

# -*-coding: UTF-8 -*-

class ShuXing(object):

class_shuxing = "class_shuxing"

class_shuxing_list = [1, 2, 3]

def __init__(self):

self.instance_shuxing = "instance_shuxing"

self.instance_shuxing_list = [5, 6, 7]

print ShuXing.class_shuxing

print ShuXing.class_shuxing_list

#print ShuXing.instance_shuxing   类名不能访问instance不可变变量

#print ShuXing.instance_shuxing_list  类名不能访问instance可变变量

a = ShuXing()

#instance可以访问任何变量

print a.class_shuxing

print a.class_shuxing_list

print a.instance_shuxing

print a.instance_shuxing_list

print "+++++++++++++++++++"

print "instance gaipian class"

a.class_shuxing = "gaipian class_shuxing"

a.class_shuxing_list.append("gaipian class_shuxing_list")

print ShuXing.class_shuxing  #类不可变变量没改变

print ShuXing.class_shuxing_list  #类可变变量有改变

#print ShuXing.instance_shuxing

#print ShuXing.instance_shuxing_list

a = ShuXing()

print a.class_shuxing

print a.class_shuxing_list   #类可变变量有改变

print a.instance_shuxing

print a.instance_shuxing_list

print "+++++++++++++++++++"

print "class gaipian class"

ShuXing.class_shuxing = "gaipian class_shuxing"

ShuXing.class_shuxing_list.append("gaipian class_shuxing_list")

print ShuXing.class_shuxing   #类不可变变量有改变

print ShuXing.class_shuxing_list  #类可变变量有改变

#print ShuXing.instance_shuxing

#print ShuXing.instance_shuxing_list

a = ShuXing()

print a.class_shuxing   #类不可变变量有改变

print a.class_shuxing_list  #类可变变量有改变

print a.instance_shuxing

print a.instance_shuxing_list

1.Python是一门动态语言,任何实体都可以动态地添加或删除属性。

2.一个类定义了一个作用域。

3.类实例也引入了一个作用域,这与相应类定义的作用域不同。

4.在类实例中查找属性的时候,首先在实例自己的作用域中查找,如果没有找到,则再在类定义的作用域中查找。

5.在对类实例属性进行赋值的时候,实际上会在类实例定义的作用域中添加一个属性(如果还不存在的话),并不会影响到相应类中定义的同名属性。

class ShuXing2(object):

a = 0

def __init__(self):

self.a = 10

self.b = 20

print ShuXing2.a  # 0

#print ShuXing2.b  #类名不能访问instance变量

a = ShuXing2()

print a.a  # 10

print a.b  # 20

二:用方法访问变量

1 hasattr():根据输入参数判断某个容器中是否有已该参数为名称的内容,如果有则返回true

2 getattr():取出容器中以参数为名称的内容

3 setattr():对容器中以参数为名称的内容进行修改

4 delattr():删除容器中以参数为名称的内容

class ShuXing2(object):

a = 0

def __init__(self):

self.a = 10

self.b = 20

a = ShuXing2()

print hasattr(a, ‘a‘)  #True

print getattr(a, ‘a‘)  #10

print setattr(a, ‘a‘, 100)  #None

print getattr(a, ‘a‘) #100

print delattr(a, ‘a‘) #None

print getattr(a, ‘a‘) #0

三:使用特性来管理类实例的属性访问控制

# -*- coding:UTF-8 -*-

class Student(object):

def __init__(self, score):

self.__score = score

@property

def score(self):

return self.__score

@score.setter

def score(self, value):

if not isinstance(value, int):

raise ValueError(‘score must be an integer!‘)

if value < 0 or value > 100:

raise ValueError(‘score must between 0 ~ 100!‘)

self.__score = value

s = Student(80)

#print s.__score

s.score = 60

print s.score

s.score = 9999

‘‘‘

60

Traceback (most recent call last):

File "lizi2.py", line 24, in <module>

s.score = 9999

File "lizi2.py", line 16, in score

raise ValueError(‘score must between 0 ~ 100!‘)

ValueError: score must between 0 ~ 100!

‘‘‘

时间: 2024-08-02 18:57:12

python实例属性和类属性精讲的相关文章

python 之实例属性和类属性

由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(object): def __init__(self, name): self.name = name s = Student('Bob') s.score = 90 但是,如果Student类本身需要绑定一个属性呢?可以直接在class中定义属性,这种属性是类属性,归Student类所有: class Student(object): name

【Python】[面性对象编程] 获取对象信息,实例属性和类属性

获取对象信息1.使用isinstance()判断class类型2.dir() 返回一个对象的所有属性和方法3.如果试图获取不存在的对象会抛出异常[AttributeError]4.正确利用对象内置函数的例子: def readImage(fp): if hasattr(fp,"read"): return readData(fp) return None 实例属性和类属性1.一句话,Python是动态语言,根据类创建的实例可以任意绑定属性.    注意:实例属性和雷属性的名字要保持不一

Python day 8(4) 实例属性和类属性

1 由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(object): def __init__(self, name): self.name = name s = Student('Bob') s.score = 902 如果Student类本身需要绑定一个属性,可以直接在class中定义属性,这种属性是类属性,归Student类所有: class Student(object): name

Python实用笔记 (22)面向对象编程——实例属性和类属性

由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(object): def __init__(self, name): self.name = name s = Student('Bob') s.score = 90 但是,如果Student类本身需要绑定一个属性呢?可以直接在class中定义属性,这种属性是类属性,归Student类所有: class Student(object): name

python中类对象、实例对象、类属性、实例属性、类方法、实例方法、静态方法

类对象.类属性与实例对象.实例属性的区别 在Python中一切皆是对象,类是一个特殊的对象即类对象,描述类的属性称为类属性.类属性在内存中只有一份,在__init__外部定义. 通过类创建的对象称为实例对象,描述实例对象的属性称为实例属性.实例属性在各自对象的内存中都保存一份,在__init__方法内部定义. 实例方法.类方法.静态方法的区别 这三种方法都是保存在类的内存中,调用者不同. 实例方法由对象调用,至少一个self参数,self代表对象的引用. 类方法有类调用,至少一个cls参数,并且

实例属性和类属性

实例属性通过self或实例变量来定义,注意__init__方法中定义的是实例属性: class Student(object): def __init__(self, name): self.name = name s1 = Student('Bob') #给实例添加一个属性 s1.score = 90 s2 = Student('Jim') 在实例s1中添加一个属性score, 该属性只对s1有用,在s2中是没有的: >>> s1.score 90 >>> s2.sc

面向对象编程——实例属性和类属性(六)

由于python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(object): def __init__(self,name): self.name = name s = Student('Bob') #添加实例 s.score = 90 #添加属性 但是,如果Student类本身需要绑定一个属性呢?可以直接在class中定义属性,这种属性是类属性,归Student类所有: >>> class St

面向对象编程(实例属性、类属性)

由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(object): def __init__(self, name): self.name = name s = Student('Bob') s.score = 90 但是,如果Student类本身需要绑定一个属性呢?可以直接在class中定义属性,这种属性是类属性,归Student类所有: class Student(object): name

python 对象属性与类属性

class Person(object): # 这里的属性实际上属于类属性(用类名来调用) name = "person" def __init__(self, name): pass #对象属性 self.name = name print(Person.name)per = Person("tom")#对象属性的优先级高于类属性print(per.name)#动态的给对象添加对象属性per.age = 18#只针对于当前对象生效,对于类创建的其他对象没有作用pr

第三百五十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—数据收集(Stats Collection)

第三百五十四节,Python分布式爬虫打造搜索引擎Scrapy精讲-数据收集(Stats Collection) Scrapy提供了方便的收集数据的机制.数据以key/value方式存储,值大多是计数值. 该机制叫做数据收集器(Stats Collector),可以通过 Crawler API 的属性 stats 来使用无论数据收集(stats collection)开启或者关闭,数据收集器永远都是可用的. 因此您可以import进自己的模块并使用其API(增加值或者设置新的状态键(stat k