我正在努力了解它的用法super()
.从它的外观来看,可以创建两个子类,就好了.
我很想知道以下2个孩子班级之间的实际差异.
class Base(object):
def __init__(self):
print "Base created"
class ChildA(Base):
def __init__(self):
Base.__init__(self)
class ChildB(Base):
def __init__(self):
super(ChildB, self).__init__()
ChildA()
ChildB()
Run Code Online (Sandbox Code Playgroud) Python中的旧样式和新样式类有什么区别?我什么时候应该使用其中一种?
我想知道如何检查变量是否是一个类(不是实例!).
我已经尝试使用该函数isinstance(object, class_or_type_or_tuple)
来执行此操作,但我不知道类将具有什么类型.
例如,在以下代码中
class Foo: pass
isinstance(Foo, **???**) # i want to make this return True.
Run Code Online (Sandbox Code Playgroud)
我试图取代" class
"与??? ,但我意识到这class
是python中的关键字.
我发现以下两项工作:
class Foo():
def a(self):
print "hello"
class Foo(object):
def a(self):
print "hello"
Run Code Online (Sandbox Code Playgroud)
所有Python类都应该扩展对象吗?没有扩展对象有任何潜在的问题吗?
我正在尝试学习python,我现在正试图获得类的挂起以及如何使用实例操作它们.
我似乎无法理解这个练习题:
创建并返回其名称,年龄和专业与输入相同的学生对象
def make_student(name, age, major)
Run Code Online (Sandbox Code Playgroud)
我只是没有得到对象的含义,它们是否意味着我应该在包含这些值的函数内创建一个数组?或创建一个类,让这个函数在其中,并分配实例?(在这个问题之前,我被要求建立一个名字,年龄和内部专业的学生班)
class Student:
name = "Unknown name"
age = 0
major = "Unknown major"
Run Code Online (Sandbox Code Playgroud) 在旧的python版本中,当你在python中创建一个类时,它可以从对象继承,这是我理解的一个特殊的内置python元素,它允许你的对象成为一个新式的对象.
那么新版本(> 3.0和2.6)呢?我用google搜索了类对象,但是得到了很多结果(显而易见的原因).任何提示?
谢谢!
我不知道什么时候属性应该是私有的,如果我应该使用属性.
我最近读到,setter和getter不是pythonic,我应该使用属性装饰器.没关系.
但是,如果我有属性,那么不能从类外部设置但可以读取(只读属性).这个属性应该是私有的,私有的我是指下划线,就像那样self._x
?如果是,那么如何在不使用getter的情况下阅读它?我现在唯一知道的方法是写
@property
def x(self):
return self._x
Run Code Online (Sandbox Code Playgroud)
这样我可以读取属性obj.x
但我无法设置它obj.x = 1
所以它没关系.
但是我真的应该关心设置不能设置的对象吗?也许我应该离开它.但是我再也不能使用下划线,因为obj._x
用户读取很奇怪,所以我应该使用obj.x
然后再次用户不知道他不能设置这个属性.
你有什么看法和实践?
这是我的代码
N = namedtuple("N", ['ind', 'set', 'v'])
def solve()
items=[]
stack=[]
R = set(range(0,8))
for i in range(0,8):
items.append(N(i,R,8))
stack.append(N(0,R-set(range(0,1)),i))
while(len(stack)>0):
node = stack.pop()
print node
print items[node.ind]
items[node.ind].v = node.v
Run Code Online (Sandbox Code Playgroud)
在最后一行,我不能将items[node.ind].v
值设置node.v
为我想要的,并得到错误
"AttributeError: can't set attribute"
Run Code Online (Sandbox Code Playgroud)
我不知道什么是错的,但它必须是基于语法的东西,因为使用语句node.v+=1
也会显示相同的错误.我是Python的新手,所以请建议一种方法来实现上述变更.
我知道这class foo(object)
是一种老式的定义课程的方式.但我想更详细地了解这两者之间的区别.
当我创建一个包含其唯一内容的模块时:
class Classname(randomobject):
pass
Run Code Online (Sandbox Code Playgroud)
我尝试运行解释器说randomobject
没有定义的模块的.py文件.
但当我这样做时:
class Classname(object):
pass
Run Code Online (Sandbox Code Playgroud)
模块运行得很好.所以,如果object
不是关键字,那么它是什么?
python ×10
class ×2
inheritance ×2
oop ×2
attributes ×1
keyword ×1
object ×1
private ×1
properties ×1
python-2.7 ×1
python-3.x ×1
readonly ×1
reflection ×1
super ×1
types ×1