Python 如何在能够调用函数的同时使函数可调用
我正在做一个游戏,想为我的对象创建一个对象类,但也决定稍微推动一下我自己,现在我遇到了一个障碍 因此,我希望函数能够被调用,同时能够像目录一样使用它。 我不希望get/set函数干扰get/set类 示例:Python 如何在能够调用函数的同时使函数可调用,python,object,Python,Object,我正在做一个游戏,想为我的对象创建一个对象类,但也决定稍微推动一下我自己,现在我遇到了一个障碍 因此,我希望函数能够被调用,同时能够像目录一样使用它。 我不希望get/set函数干扰get/set类 示例: obj.position.get() obj.position.get.x() class Object: def __init__(self, x, y, width, height): self.__x = x self.__y = y
obj.position.get()
obj.position.get.x()
class Object:
def __init__(self, x, y, width, height):
self.__x = x
self.__y = y
self.__width = width
self.__height = height
self.size = self.__Size(self)
self.position = self.__Position(self)
class __Size:
def __init__(self, outer):
self.__outer = outer
self.get = self.__get(self.__outer)
self.set = self.__set(self.__outer)
# Trying to make the two functions below work without interfering with the __get and __set classes
def get(self):
return self.__outer.__width, self.__outer.__height
def set(self, width, height):
self.__outer.__width = width
self.__outer.__height = height
class __get:
def __init__(self, outer):
self.__outer = outer
def width(self):
return self.__outer.__width
def height(self):
return self.__outer.__height
class __set:
def __init__(self, outer):
self.__outer = outer
def width(self, width):
self.__outer.__width = width
def height(self, height):
self.__outer.__height = height
class __Position:
def __init__(self, outer):
self.__outer = outer
self.get = self.__get(self.__outer)
self.set = self.__set(self.__outer)
# Trying to make the two functions below work without interfering with the __get and __set classes
def get(self):
return self.__outer.__x, self.__outer.__y
def set(self, x, y):
self.__outer.__x = x
self.__outer.__y = y
class __get:
def __init__(self, outer):
self.__outer = outer
def width(self):
return self.__outer.__x
def height(self):
return self.__outer.__y
class __set:
def __init__(self, outer):
self.__outer = outer
def x(self, x):
self.__outer.__x = x
def y(self, y):
self.__outer.__y = y
代码:
obj.position.get()
obj.position.get.x()
class Object:
def __init__(self, x, y, width, height):
self.__x = x
self.__y = y
self.__width = width
self.__height = height
self.size = self.__Size(self)
self.position = self.__Position(self)
class __Size:
def __init__(self, outer):
self.__outer = outer
self.get = self.__get(self.__outer)
self.set = self.__set(self.__outer)
# Trying to make the two functions below work without interfering with the __get and __set classes
def get(self):
return self.__outer.__width, self.__outer.__height
def set(self, width, height):
self.__outer.__width = width
self.__outer.__height = height
class __get:
def __init__(self, outer):
self.__outer = outer
def width(self):
return self.__outer.__width
def height(self):
return self.__outer.__height
class __set:
def __init__(self, outer):
self.__outer = outer
def width(self, width):
self.__outer.__width = width
def height(self, height):
self.__outer.__height = height
class __Position:
def __init__(self, outer):
self.__outer = outer
self.get = self.__get(self.__outer)
self.set = self.__set(self.__outer)
# Trying to make the two functions below work without interfering with the __get and __set classes
def get(self):
return self.__outer.__x, self.__outer.__y
def set(self, x, y):
self.__outer.__x = x
self.__outer.__y = y
class __get:
def __init__(self, outer):
self.__outer = outer
def width(self):
return self.__outer.__x
def height(self):
return self.__outer.__y
class __set:
def __init__(self, outer):
self.__outer = outer
def x(self, x):
self.__outer.__x = x
def y(self, y):
self.__outer.__y = y
你所拥有的是痛苦的复杂。使用组合不需要嵌套类
class Size:
def __init__(self, width, height):
self.width = width
self.height = height
class Position:
def __init__(self, x, y):
self.x = x
self.y = y
class Object:
def __init__(self, size, pos):
self.size = size
self.pos = pos
@classmethod
def from_scratch(cls, x, y, width, height):
return cls(Size(x,y), Position(width, height))
obj1 = Object(Size(3, 5), Position(0,0))
obj2 = Object.from_scratch(9, 22, 10, 5)
obj1_location = obj1.position
obj2_size = obj2.size
你所拥有的是痛苦的复杂。使用组合不需要嵌套类
class Size:
def __init__(self, width, height):
self.width = width
self.height = height
class Position:
def __init__(self, x, y):
self.x = x
self.y = y
class Object:
def __init__(self, size, pos):
self.size = size
self.pos = pos
@classmethod
def from_scratch(cls, x, y, width, height):
return cls(Size(x,y), Position(width, height))
obj1 = Object(Size(3, 5), Position(0,0))
obj2 = Object.from_scratch(9, 22, 10, 5)
obj1_location = obj1.position
obj2_size = obj2.size
为什么要有一个
\u get
和\u set
类呢?类嵌套通常是个坏主意,而三类嵌套更糟糕!为了使obj.position.get()
和obj.position.get.x()
都能工作,get
必须是一个可调用的对象。这意味着,无论obj.position.get
有什么类型,它都应该定义\uuu调用
方法来定义get()
的含义。为什么要有\uu get
和\uu集
类呢?类嵌套通常是个坏主意,而三类嵌套更糟糕!为了使obj.position.get()
和obj.position.get.x()
都能工作,get
必须是一个可调用的对象。这意味着,无论obj.position.get
有什么类型,它都应该定义\uuu调用\uuuu
方法来定义get()
的含义。