基本上我想访问所有标准蟒INT运营商,例如__and__和__xor__等,具体而言,每当结果终于印刷我希望它在十六进制格式表示.(有点像把我的计算器放到十六进制模式)
class Hex(int):
def __repr__(self):
return "0x%x"%self
__str__=__repr__ # this certainly helps with printing
if __name__=="__main__":
print Hex(0x1abe11ed) ^ Hex(440720179)
print Hex(Hex(0x1abe11ed) ^ Hex(440720179))
Run Code Online (Sandbox Code Playgroud)
理想情况下,两行输出应为十六进制:0xfacade,但第一行输出十进制:16435934
有任何想法吗?
我有一个带有自定义类的iPhone应用程序,我创建Detail的子类UIViewController.
我需要创建一个子类Detail,我想调用它ActivityDetail.所以我在ActivityDetail.h文件中写了以下内容:
#import <UIKit/UIKit.h>
#import "Detail.h"
@interface ActivityDetail : Detail {
}
@end
Run Code Online (Sandbox Code Playgroud)
问题是我收到编译器错误告诉我这个:
错误:无法找到'Detail'的接口声明,'ActivityDetail'的超类
奇怪的是:我可以将超类更改Detail为UIView(例如),编译得到很多错误(显然),然后Detail再次更改超类,一切正常!但是,如果我随后改变了Detail类,那么问题从一开始就会回来......
我怎么解决这个问题?
我正在尝试为golang中的所有结构创建一个基础对象.出于某种原因,当我创建的新对象位于不同的包中时,我无法使其工作.它们在同一个包/文件夹中时工作正常.
例如,所有对象的基类
package Test
type BaseObject struct {
base interface{}
}
Run Code Online (Sandbox Code Playgroud)
----子文件夹测试\东西---
创建一个新的TestObject,它是BaseObject的子类
package Stuff
import Test "Test"
type TestObject struct{
Test.BaseObject
}
func (this *TestObject)DoSomething(){
any reference to this.base or this.BaseObject.base fails!!!
}
Run Code Online (Sandbox Code Playgroud)
---在同一个文件夹中,everthing工程---
package Test
type TestObject struct{
BaseObject
}
func (this *TestObject)DoSomething(){
any reference to this.base works fine??
}
Run Code Online (Sandbox Code Playgroud) 有一个类(不是我创建的,来自第三方库)没有__init__声明(除了object's __init__),这是它的__new__:
def __new__(cls, uid):
self = super().__new__(cls, uid)
self._info = get_info_from_uid(uid)
return self
Run Code Online (Sandbox Code Playgroud)
我不明白他们为什么不在__init__这里使用,但他们没有.
现在我想继承它并给它一个额外的属性; 在我检查类的源代码(仅文档)之前,我认为它只是__init__像其他人一样使用,所以这就是我所做的:
class MyClass(TheirClass):
def __init__(self, uid, my_stuff=()):
super().__init__(uid)
self.my_stuff = my_stuff
Run Code Online (Sandbox Code Playgroud)
显然,这引发了一个object.__init__()不参加参数的TypeError .我应该如何将这个类子类化__new__?我只是覆盖__new__方法吗?
我想对 NSURLSession 类进行子类化,但我在初始化时遇到问题。基本上我重写构造函数并在那里初始化常量,authUrl然后调用父 init 方法。
class NSURLAuthSession: NSURLSession {
let authUrl:NSURL;
//Error: Initializer does not override a designated initializer from its superclass
override init(configuration: NSURLSessionConfiguration, delegate: NSURLSessionDelegate?, delegateQueue queue: NSOperationQueue?){
self.authUrl = NSURL.URLWithBaseURLString("http://192.168.10.105:8888/api/v1", pathSegments: ["users", "login"])!
super.init(configuration: configuration, delegate: delegate, delegateQueue: queue)
}
}
Run Code Online (Sandbox Code Playgroud)
从 NSURLSession 的源代码中我发现它有两个初始化器:
public /*not inherited*/ init(configuration: NSURLSessionConfiguration)
public /*not inherited*/ init(configuration: NSURLSessionConfiguration, delegate: NSURLSessionDelegate?, delegateQueue queue: NSOperationQueue?)
Run Code Online (Sandbox Code Playgroud)
我期望“最长”的初始化程序是指定的初始化程序,但事实并非如此。我怀疑指定的初始值设定项init()甚至没有在源代码中指定。如何覆盖初始化程序并设置配置NSURLSessionConfiguration?
当我研究如何在C#中为ASP.NET项目创建子类时,我感觉非常聪明,然后我发现了一个问题 - 我不知道如何根据SQL查询的结果创建正确子类的对象.
假设您有一个名为Animal的类和两个名为Zebra和Elephant的子类.你明白了吗?
我想要做的是执行一个SQL查询,如果返回的行有行["Type"] ="Zebra"然后加载一个Zebra对象(或者如果它是一个大象然后..).
所以,原则上,Animal类将有一个静态方法:
class Animal{
public static Animal Load(DataRow row){
if (row["Type"]=="Zebra"){
return new Zebra();
}
}
class Zebra : Animal{
//some code here
}
Run Code Online (Sandbox Code Playgroud)
这是完全可能的还是我只是明白了子类的想法是错误的.很明显,我不是OO专家.
先谢谢你,杰克
我试图继承UIAlertView以更好地处理我的应用程序中的错误状态.我遇到的问题是使用otherButtonTitles nil终止参数,当我创建我的子类时,它只是拾取列表中的第一个字符串而不是所有字符串
+ (ErrorAlertView *)displayErrorAlertViewWithTitle:(NSString *)title
message:(NSString *)message
delegate:(id<UIAlertViewDelegate>)delegate
errorDelegate:(id<ErrorAlertViewDelegate>)errorDelegate
cancelButtonTitle:(NSString *)cancelButtonTitle
displayNow:(BOOL)displayNow
tag:(NSUInteger)tag
otherButtonTitles:(NSString *)otherButtonTitles, ...;
{
ErrorAlertView *errorAlertView = [[ErrorAlertView alloc] initWithTitle:title
message:message
delegate:delegate
cancelButtonTitle:cancelButtonTitle
otherButtonTitles:otherButtonTitles, nil];
errorAlertView.errorDelegate = errorDelegate;
errorAlertView.tag = tag;
if (displayNow) {
[errorAlertView show];
}
return [errorAlertView autorelease];
}
Run Code Online (Sandbox Code Playgroud)
如果我进行以下调用上面的方法:
[ErrorAlertView displayErrorAlertViewWithTitle:[self noInternetConnectionAlertViewTitle]
message:[self noInternetConnectionAlertViewMessage]
delegate:self
errorDelegate:errorDelegate
cancelButtonTitle:@"OK"
displayNow:YES
tag:ErrorAlertTagInternetConnectionError
@"Try again",@"Setting", nil];
Run Code Online (Sandbox Code Playgroud)
显示UIAlertView时只显示@"再试一次"按钮.
我想跟踪何时按下回车键或回车键,然后将焦点集中在其他某个小部件上,但是如果未按下该小部件,则spinbox应该采取常规措施而不是其他措施。我已经将QSpinBox子类化,并创建了受保护的void keyPressEvent(QKeyEvent * event)。里面是这段代码:
void MytSpinBox::keyPressEvent(QKeyEvent *event) {
if (event->key() == Qt::Key_Return) {
qDebug() << "return pressed";
editingFinished();
} else {
qDebug() << "Other key";
event->accept();
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码应该可以,但是不能。我不知道这是怎么回事,但是当我专注于升级的Spinbox并尝试更改其中的数字时,它将无法正常工作,只会显示调试消息。如果我按Enter / Return键,它将打印调试消息并关注我在editFinished()中设置的其他小部件。
我究竟做错了什么?
对于iterables,子类化冷冻集和集合似乎不起作用.尝试运行以下MWE:
class MonFrozenSet(frozenset):
def __new__(self, data):
super(MonFrozenSet,self).__init__(data)
return self
class MonSet(set):
def __init__(self, data):
super(MonSet,self).__init__(data)
x=(1,2,3,4)
A=MonSet(x)
B=MonFrozenSet(x)
for y in A: #Works
print y
for y in B: #Doesn't work
print y
Run Code Online (Sandbox Code Playgroud)
第二个for回归:
for y in B:
TypeError: 'type' object is not iterable
Run Code Online (Sandbox Code Playgroud)
关于如何解决这个问题的任何想法?
如果你问自己为什么我想使用freezeset,那就是我试图创建一组元组.元组集将被冻结,元组集将成为一组.
我使用Python-2.7
我想做这样的事情:
public class MyClass {
public virtual void Foo() {
this.DoSomethingThatWouldBeFineInASubclassButAnOverrideWouldNotWantToUse();
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,我在这里做一些工作,我想要一个默认的方法,但如果有人要覆盖,他们可能不会使用默认.将base.Foo()放入覆盖中而不考虑它是如此容易; 实际上我的IDE会自动完成.我想防止这种情况.可能吗?
subclassing ×10
python ×3
c# ×2
c++ ×1
go ×1
hex ×1
inheritance ×1
ios ×1
iphone ×1
keypress ×1
nsurlsession ×1
null ×1
objective-c ×1
overriding ×1
python-2.7 ×1
python-3.x ×1
qspinbox ×1
qt ×1
set ×1
sql ×1
swift ×1
types ×1
uialertview ×1
xcode ×1