我正在尝试自己学习Python,因此,我得到了一个用C#编写的软件,并试图用Python重新编写它.鉴于以下课程,我有几个问题:
C#
sealed class Message
{
private int messageID;
private string message;
private ConcurrentBag <Employee> messageFor;
private Person messageFrom;
private string calltype;
private string time;
public Message(int iden,string message, Person messageFrom, string calltype,string time)
{
this.MessageIdentification = iden;
this.messageFor = new ConcurrentBag<Employee>();
this.Note = message;
this.MessageFrom = messageFrom;
this.CallType = calltype;
this.MessageTime = time;
}
public ICollection<Employee> ReturnMessageFor
{
get
{
return messageFor.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的类中,我有一个名为messageFor的线程安全集合,在Python中是否存在等价物?如果是这样,我如何在python类中实现它?
我的线程安全集合也有一个吸气剂?我如何在Python中做同样的事情?
Python有一个EqualsTo方法来测试对象之间的相等性吗?或者相当于Python中的这个?
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
Message testEquals = obj as Message;
if((System.Object)testEquals == null)
{
return false;
}
return (this.messageID == testEquals.messageID) && (this.message == testEquals.message) && (this.messageFor == testEquals.messageFor) && (this.messageFrom == testEquals.messageFrom) && (this.calltype == testEquals.calltype);
}
public bool Equals(Message p)
{
if ((Object)p == null)
{
return false;
}
return (this.messageID == p.messageID) && (this.message == p.message) && (this.messageFor == p.messageFor) && (this.messageFrom == p.messageFrom) && (this.calltype == p.calltype);
}
Run Code Online (Sandbox Code Playgroud)你能把它密封起来,以致没有人可以继承吗?
到目前为止我得到了什么:
class Message:
def __init__(self, messageID, message, callType):
self.messageID = messageID
self.message = message
self.callType = callType
Run Code Online (Sandbox Code Playgroud)
在我的类中,我有一个名为 messageFor 的线程安全集合,Python 中是否有等效的集合?如果是这样,我如何在 python 类中实现它?
一般来说,CPython 的全局解释器锁可以防止由于同时访问/修改而导致的崩溃,因为您根本无法实现真正的同时评估。因此,普通列表可能是合适的,或者您可能需要一个队列来防止更高级别的竞争条件。有关详细信息,请参阅列表是否是线程安全的。
我的线程安全集合也有一个吸气剂?我该如何在 Python 中做同样的事情呢?
您可以使用装饰器模拟 C# getter/setter 的行为@property。有关详细信息,请参阅Python @property 与 getter 和 setter 。
Python 有 EqualsTo 方法来测试对象之间的相等性吗?或者Python 中的等价物?
您可以使用该__eq__方法定义相等行为。例如,您的代码可能会转换为以下内容:
class Thing:
#other methods go here...
def __eq__(self, other):
if not isinstance(other, Thing):
return False
return self.messageID == other.messageID and self.message == other.message #and... etc
Run Code Online (Sandbox Code Playgroud)
能不能把它封印起来,不让任何人继承?
据我所知,这是不可能的。Python 通常遵循“我们都是成年人”的理念。如果编码员想要从类继承或访问对象的属性,那么他们可以;您能做的最好的事情就是给出一个严厉的建议,不要在文档中这样做(或者在“私有”属性的名称损坏的情况下设置小的减速带)。
| 归档时间: |
|
| 查看次数: |
247 次 |
| 最近记录: |