Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在能够调用函数的同时使函数可调用_Python_Object - Fatal编程技术网

Python 如何在能够调用函数的同时使函数可调用

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

我正在做一个游戏,想为我的对象创建一个对象类,但也决定稍微推动一下我自己,现在我遇到了一个障碍

因此,我希望函数能够被调用,同时能够像目录一样使用它。 我不希望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
        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()
的含义。