我创建了一个带有class属性的Kotlin类,我想在构造函数中初始化它:
public class TestClass {
private var context : Context? = null // Nullable attribute
public constructor(context : Context) {
this.context = context
}
public fun doSomeVoodoo() {
val text : String = context!!.getString(R.string.abc_action_bar_home_description)
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我必须使用"?"将属性声明为Nullable.符号,虽然该属性将在构造函数中初始化.将此属性声明为Nullable属性使得始终需要强制使用"!!"的NonNull值 或者用"?"提供空检查.
有没有办法避免这种情况,如果class属性将在构造函数中初始化?我想欣赏像这样的解决方案:
public class TestClass {
private var context : Context // Non-Nullable attribute
public constructor(context : Context) {
this.context = context
}
public fun doSomeVoodoo() {
val text : String = context.getString(R.string.abc_action_bar_home_description)
}
}
Run Code Online (Sandbox Code Playgroud) 我经常需要使用jquery一次选择多个元素...为此我通常只是为我想要选择的所有元素添加一个类,然后使用jquery按类选择.
这是一个不好的做法,还是应该使用类似html 5数据属性的东西?
class Member(object):
def __init__(self, identifier):
self.identifier = identifier
print "Member __init__", self.identifier
def __del__(self):
print "Member __del__", self.identifier
with open("/home/might/" + self.identifier, "w") as outF:
outF.write(self.identifier)
class WithMembers(object):
def __init__(self):
print "WithMembers __init__"
print WithMembers.classMem
self.instanceMem = Member("instance mem")
def __del__(self):
print "WithMembers __del__"
classMem = Member("class mem")
if __name__ == "__main__":
print "main"
WithMembers()
#del WithMembers.classMem # "Member __del__ class mem" before "end"
#del WithMembers # "Member __del__ class mem" after "end"
print "end"
Run Code Online (Sandbox Code Playgroud)
上面的代码在 Hidden.py 中,运行python Hidden.py …
python garbage-collection class class-attributes class-attribute
我想知道你怎么认为从类中的函数访问类属性的方法.我没有在PEP8中找到一个参考或一个关于它的流行问题.例如
class MyClass(object):
BAR = 1
def foo(self):
# Way A:
print(self.BAR)
# Way B:
print(MyClass.BAR)
Run Code Online (Sandbox Code Playgroud)
通过'self'访问似乎是合理的,因为属性由同一个类拥有,对于明显的同类引用具有近似引用.另一方面,通过类名称本身的访问是清楚的,因为它是静态的并且使得使用的起源清晰,并且因为它与类的名称配对而更加清晰.
以下两段代码有什么区别吗?如果没有,是否优先于另一个?为什么我们可以动态创建类属性?
片段1
class Test(object):
def setClassAttribute(self):
Test.classAttribute = "Class Attribute"
Test().setClassAttribute()
Run Code Online (Sandbox Code Playgroud)
片段2
class Test(object):
classAttribute = "Class Attribute"
Test()
Run Code Online (Sandbox Code Playgroud)