python类引用变量
㈠ python类和实例变量的理解与运用
9.3.5. 类和实例变量
一般来说,实例变量用于对每一个实例都是唯一的数据,类变量用于类的所有实例共享的属性和方法:
class Dog:
kind = 'canine' # class variable shared by all instances
def __init__(self, name):
self.name = name # instance variable unique to each instance
>>> d = Dog('Fido')
>>> e = Dog('Buddy')
>>> d.kind # shared by all dogs
'canine'
>>> e.kind # shared by all dogs
'canine'
>>> d.name # unique to d
'Fido'
>>> e.name # unique to e
'Buddy'
正如在 术语相关 讨论的, 可变 对象,例如列表和字典,的共享数据可能带来意外的效果。例如,下面代码中的 tricks 列表不应该用作类变量,因为所有的 Dog 实例将共享同一个列表:
class Dog:
tricks = [] # mistaken use of a class variable
def __init__(self, name):
self.name = name
def add_trick(self, trick):
self.tricks.append(trick)
>>> d = Dog('Fido')
>>> e = Dog('Buddy')
>>> d.add_trick('roll over')
>>> e.add_trick('play dead')
>>> d.tricks # unexpectedly shared by all dogs
['roll over', 'play dead']
这个类的正确设计应该使用一个实例变量:
class Dog:
def __init__(self, name):
self.name = name
self.tricks = [] # creates a new empty list for each dog
def add_trick(self, trick):
self.tricks.append(trick)
>>> d = Dog('Fido')
>>> e = Dog('Buddy')
>>> d.add_trick('roll over')
>>> e.add_trick('play dead')
>>> d.tricks
['roll over']
>>> e.tricks
['play dead']
总结后的知识点希望能帮到你
㈡ python中一个类的方法中怎样使用另一个类的方法中的一个变量
class a()
def bf(self,event)
name = 'bf'
# 这里的name是局部变量,不是class.a的变量, 当a.bf(event)执行完后就不存在了。
如果希望保持该变量的值在class.a中,:
class a(object):
name = ''
def bf(self, event):
a.name = 'bf'
class b(object):
def exe(self, event):
a.bf(event)
print a.name
㈢ python3.2.3怎么引用赋值了的变量
先解释第三行中中括号。
python的语法里面,中括号可以表示index。t[1]
就表示
t
这个
list
的第一项。
再解释
int
和
list
变量赋值的问题。
第三行中,l=t[1],意思就是给
t
这个
list
的第一项起了个别名叫做
l。
这就好比给张三起了个名字叫小明,下文里不论提到张三还是小明,说的都是同一个人。
那么在第四行里
l[0]='d'
其实就等价于
t[1][0]
=
'd',相当于改变了list的内容。
这在编程里叫做aliasing,python
的
list
都是有aliasing的,但是
int
(整数)没有。
所以,在第二段中,把
x
放到
m
这个
list
里的时候,只是拷贝进去了一个数值,从此以后和
x
不再有关联了。
这就好比做了个张三的克隆人,那个克隆人后来怎样,跟张三都没什么关系了。
第15-18行也是一样的道理。
如果,把那几行改为a=[4];
b=a;
b[0]=5;
print
a;
这时就会打出5来了。
综上所述,造成第一段和第二段区别的主要原因就是它们涉及的数据类型不同,list
=
起别名,
int
=克隆人。
㈣ python如何在一个类中访问另一个类的变量
1234def aaa(): s = 5 return sprint aaa()
或者:
12345def aaa(): global s s = 5aaa()print s
要在函数外部访问函数的内部变量,要么使用return将其返回到外部,要么用global定义为全局变量。推荐前一种。
def只是定义函数,你还没有调用和执行该函数。此外,要在控制台输出,你可以在函数内部写上print s+3 ,然后调用函数aaa()。
或者定义一个类:
1234class aaa: s = 5b = aaa #初始化一个类的实例print b.s #当然,你也可以直接使用aaa.s
㈤ python如何引用其他模块中类的方法中的变量
没法实现。
原因:
你的tmp,只是class a中的一个函数fun内的临时变量
所以无法直接被外部调用。
并且只有fun函数执行时才存在,函数结束时,就不存在了。
关于变量的作用范围,你可以参考:
【整理】Python中变量的作用域(variable scope)
想要可以被调用,可以试试:
改为:
#A.py
Class a()
tmp='123'
def fun()
。。。。。。
然后再去:
import A
print A.tmp
注意:
此时,tmp就是class a中的全局变量了。
㈥ python如何在一个模块中调用另一个模块中的变量
python在一个模块中调用另一个模块中的变量步骤如下:
1、要实现变量的深度拷贝,需要使用到模块,导入这个模块。
㈦ Python类方法可以访问实例变量吗
不可以。
因为类方法属于类,调用非static变量需要实例,而类的加载先于实例的创建,故在静态环境中,不可以访问非静态。
㈧ 对python 中class与变量的使用方法详解
python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键。
枚举了各种情况,没有办法全部枚举,但大部分情况应该都已经包含了。
1. 类变量:能够通过类名或者object的self来访问到,在类的内部和外部均可达,比如class_var_1
2. 对象变量:可以通过对象的self来使用的变量,通过constructor一路走向去的的self初次被赋值的变量都会成为对象变量,比如object_var_1, object_var_2, object_var_3, object_var_4
3. 内部变量:可以在函数中定义,并加上self前缀,在初次调用过定义的函数后,就可以在后面的对象的函数中被使用,比如internal_var_1
4. 局部变量:在函数内部定义,并使用的变量,在使用完之后就会被回收对类及object不可见
5. 全局变量:定义在类或者函数外部,作用域在变量被定义之后的任意代码段,比如:global_var_1
㈨ python 类方法中变量如何使用
data=gdal.Open(file_path)
改成 data=gdal.Open(self.file_path)
__init__会初始化实例, self.file_path = fl 是把 fl 的值赋到 实例里面,你访问 file_path,这个根本没定义过,肯定报错。
抽空补一下基础吧,还是非常重要的。我现在也还在基础中挣扎
㈩ Python中的变量引用对象需注意的几点
给你介绍Python中普通引用和共享引用在引用对象中需要注意的点:
普通引用:
Python中,变量的作用仅仅是一个标识,只有赋值后才被创建,它可以引用任何类型的对象,而且在引用之前必须赋值。赋值后的变量指向响应的对象,拥有该对象的空间。类型属于对象,但是不是变量。
[python]
view plain
a = 3
a = "science"
上述代码说明数值3和字符串“science”分别是两种对象,初始变量a赋值对象3被创建,变量a指向对象3的内存空间,之后变量a又指向了字符串的内存空间。
共享引用:
[python]
view plain
a = 3
b = a
上述代码说明变量a,b同时引用了对象3,两个变量引用了相同的对象。正是因为两者都是指向了相同的对象,所以当其中一个变量引用其他对象的时候,不会对另一个变量造成影响。例如:
[python]
view plain
a = “science”
在上面代码的基础上,变量a引用了字符串对象“science”,此时变量b依旧引用对象3,而不是“science”。
但是有些对象的操作会在原处修改,例如列表。例如:
[python]
view plain
a = [1,2,3]
b = a
变量a,b应用了包含1,2,3对象的列表,自然而然的a[0]引用对象1,如果在变量a中执行操作
[python]
view plain
a[0] = 4
那么变量b就变随之变为[4,2,3]。避免这种情况可以使用操作,替换引用操作。