[英]Tkinter - Python 3 - Adding an Increment Counter into a class window?
[英]Increment class instance counter in Python
我对 Python 不太熟悉,因为我有 Java 背景。 我有这个简单的 class:
## Class declaration
class SemVersion:
major: int
minor: int
patch: int
def __init__(self, major, minor, patch):
self.major = major
self.minor = minor
self.patch = patch
def incrementMinor(self):
print(self)
self.minor = self.minor + 1
return self
def toString(self):
return self.major + "." + self.minor + "." + self.patch
def toSnapshotString(self):
return self.toString() + "-SNAPSHOT"
以下语句引发错误:
newDevelopVersion = releaseSemVersion.incrementMinor()
例外:
Traceback(最近一次调用最后一次):文件“C:\devenv\java\apps\vsb-letters-transfer-api\release_preprod.py”,第 41 行,在 newDevelopVersion = releaseSemVersion.incrementMinor() 文件“C:\devenv\ java\apps\vsb-letters-transfer-api\release_helpers.py",第 17 行,增量次要 self.minor = self.minor + 1 TypeError: can only concatenate str (not "int") to str
我想了解 Python 是如何设法不将其识别为 integer 的,因为我是这样声明的,只是按照我要求的方式增加。
我确信对此有一个合理的解释。
我看不出我是如何要求任何地方将字符串添加到 int 或任何类似性质的东西的。
非常感谢。
Python 不强制注释中的类型。 注释主要用于文档目的。
当您初始化 object 时,您可能会将str
传递给构造函数,这会使解释器认为releaseSemVersion.minor
是字符串而不是int
。
您可以通过在__init__()
中添加检查来避免这种情况,如下所示
def __init__(self, major, minor, patch):
if not isinstance(major, int):
raise TypeError('major must by of type int')
if not isinstance(minor, int):
raise TypeError('minor must by of type int')
if not isinstance(patch, int):
raise TypeError('patch must by of type int')
self.major = major
self.minor = minor
self.patch = patch
首先,使用Python时的一些注意事项:
Python 不强制类型,类型提示只是帮助您和其他人了解某些方法或 function 的预期
变量和方法名称必须采用蛇形大小写格式,遵循snake_case
上描述的最佳实践
现在,重构您的示例,您应该能够执行所需的操作:
class SemVersion:
major: int
minor: int
patch: int
def __init__(self, major, minor, patch):
self.major = major
self.minor = minor
self.patch = patch
def increment_minor(self):
self.minor = self.minor + 1
return self
def to_string(self):
return self.major + "." + self.minor + "." + self.patch
def to_snapshot_string(self):
return self.toString() + "-SNAPSHOT"
# Your class instance
develop_vision = SemVersion(
major=1,
minor=2,
patch=3
)
print(f"Initial value of minor: {develop_vision.minor}")
develop_vision.increment_minor()
develop_vision.increment_minor()
print(f"New value of minor: {develop_vision.minor}")
现在,如果你想检查你的构造函数 arguments 类型,pydantic 可以帮助你!
# Make sure that your virtual environment is active
$ pip3 install pydantic
调整您的 class 以使用 pydantic 验证
from pydantic import BaseModel, StrictInt
class SemVersion(BaseModel):
major: StrictInt
minor: StrictInt
patch: StrictInt
# You don't need build a constructure anymore, pydantic do it for you
def increment_minor(self):
self.minor = self.minor + 1
return self
def to_string(self):
return self.major + "." + self.minor + "." + self.patch
def to_snapshot_string(self):
return self.toString() + "-SNAPSHOT"
# Your class instance
develop_vision = SemVersion(
major=1,
minor=2,
patch='10'
)
print(develop_vision)
如果您尝试使用类似 '10' 的字符串运行此代码,您将从 pydantic 获得异常,如下所示:
Traceback (most recent call last):
File "/home/jns/Desktop/stack.py", line 23, in <module>
develop_vision = SemVersion(
File "pydantic/main.py", line 341, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for SemVersion
patch
value is not a valid integer (type=type_error.integer)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.