python访问类变量
⑴ python 静态方法可以访问类方法吗
Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的:
1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数;
2)从第1条,静态方法是无法访问实例变量的,而类成员方法也同样无法访问实例变量,但可以访问类变量;
3)静态方法有点像函数工具库的作用,而类成员方法则更接近类似Java面向对象概念中的静态方法。
实现静态方法和类方法的两种方式
一、在Python 2.3及之前,用staticmethod和classmethod类型对象包装实现
例子如下(注意print里的说明):
class MyClass:
val1 = 'Value 1'
def __init__(self):
self.val2 = 'Value 2'
def staticmd():
print '静态方法,无法访问val1和val2'
smd = staticmethod(staticmd)
def classmd(cls):
print '类方法,类:' + str(cls) + ',val1:' + cls.val1 + ',无法访问val2的值'
cmd = classmethod(classmd)
执行:
>>> mc = MyClass()
>>> mc.smd()
>>> mc.cmd()
>>> MyClass.smd()
>>> MyClass.cmd()
二、在Python 2.4及之后,用装饰器(decorators)实现
装饰器使用@操作符,例子如下:
class MyClass:
val1 = 'Value 1'
def __init__(self):
self.val2 = 'Value 2'
@staticmethod
def staticmd():
print '静态方法,无法访问val1和val2'
@classmethod
def classmd(cls):
print '类方法,类:' + str(cls) + ',val1:' + cls.val1 + ',无法访问val2的值'
⑵ python中为什么类的实例方法可以直接访问全局变量
只要这个实例属于这个类,就能访问这个类的所有共享变量
⑶ 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
⑷ python 类方法访问不出self变量
第一个参数写self是指定为实例方法不是类方法、类方法要用@classmethod装饰,
self其实也可以用必带名字代替的。
具体可以参考这篇文章
⑸ python 类变量和实例变量的区别
类变量定义在类的定义之后,实例变量则是以为self.开头。例如:
class Foo(object):
val1= 'aa' #类变量
def __init__(self):
self.val2 = 'bb' #实例回变量
val3= 'cc' #顺便设置的变答量不知道属于什么变量
print self.__class__.val1 #实例对象访问类变量的另一种方法
实例对象可以访问类变量和实例变量
但是类对象却只能访问类变量,在实例方法中的变量都不能访问。
⑹ python的子类怎么访问父类的成员变量
首先当子类继承了父类,因此子类(当继承方式为public或protected时)可以访问及改动父类的public成员,但访问或改不了私有成员和不可访问变量
⑺ python类的动态方法是否可以访问到私有变量
classStudent(object):
def__init__(self,name,score):
self.__name=name;
self.__score=score;
self.__grade=3;##这是私有的属性
self.grade=3;##这是公有的。
defshow_grade(self):
print("%s__grade=%d"%(self.__name,self.__grade));
print("%sgrade=%d"%(self.__name,self.grade));
lisa=Student("lisa",88);
mona=Student("mona",82);
defset_grade(self,grade):
self.__grade=grade;##实测发现,此函数调用后__grade还是原值。__grade是私有变量。只能被class里的“静态方法”来修改。
self.grade=grade;##此函数调用后,grade的值被修改了。grade是公开变量。可以被动态方法来修改。
#print("%sgradeis%d"%(self.__name,self.grade));#在这里访问不到self.__name,所以把此句注释掉了。
Student.setGrade=set_grade;
lisa.setGrade(4);
lisa.show_grade();
结果如下:
lisa__grade=3
lisagrade=4
结论:
为类动态增加的方法,对类里私有属性没有读与写的权限。
⑻ python 类方法中变量如何使用
data=gdal.Open(file_path)
改成 data=gdal.Open(self.file_path)
__init__会初始化实例, self.file_path = fl 是把 fl 的值赋到 实例里面,你访问 file_path,这个根本没定义过,肯定报错。
抽空补一下基础吧,还是非常重要的。我现在也还在基础中挣扎
⑼ python中如何在一个类中调用另一个类的method中的变量能实现吗能否帮忙看下我的代码,谢谢!
你这个代码很有问题,
1. class Student:
def __init__(self):
for name in Name:
for id in ID:
self.name = name
self.id = id
最终Student得到的是实例有两个变量name和id,他们的值分别是Kay和3,初始化时候的遍历完全没有意义。
2. self.lst.append("{} of {}".format(Student.__init__(self.id), Student.__init__(self.name)))
Student是一个类型,你都没创建一个实例,__init__是实例的初始化函数,使用"__"修饰,是私有函数,不能在外部调用,然后那个里面参数的self是Students的self肯定是访问不到id和name的属性的。
总的来说,代码存在很多的问题。
想要获得的结果是两个列表中元素所有组合的可能性,可以这样实现:
Name = ['Stella','Kay']
ID = [1,3]
result = [(a, b) for a in ID for b in Name]
这样得到的result就是两个列表的元素的组合
⑽ 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