Hướng dẫn how to pass variables between classes in python - cách truyền biến giữa các lớp trong python

class foo[]:
  def __init__[self]
    self.var1 = 1

class bar[]:
  def __init__[self]:
    print "foo var1"

f = foo[]
b = bar[]

Trong Foo, tôi đang làm một cái gì đó tạo ra "var1" được đặt thành 1 trong thanh, tôi muốn truy cập vào nội dung của var1

Làm cách nào tôi có thể truy cập var1 trong phiên bản lớp f của foo từ trong trường hợp b của thanh

Về cơ bản các lớp này là các wxframes khác nhau. Vì vậy, ví dụ trong một cửa sổ, người dùng có thể đặt dữ liệu đầu vào, trong cửa sổ thứ hai, nó sử dụng dữ liệu đầu vào đó để tạo ra đầu ra. Trong C ++, tôi sẽ có một con trỏ cho người gọi nhưng tôi không biết cách truy cập người gọi trong Python.

Hỏi ngày 21 tháng 9 năm 2011 lúc 14:39Sep 21, 2011 at 14:39

1

Như một cách chung cho các trang khác nhau trong WXPython để truy cập và chỉnh sửa cùng một thông tin, hãy xem xét việc tạo một thể hiện của lớp thông tin trong lớp máy tính lớn của bạn [hoặc bất cứ điều gì bạn gọi là nó] và sau đó chuyển thể hiện đó lên bất kỳ trang nào khác mà nó tạo ra. Ví dụ:

class info[]:
    def __init__[self]:
        self.info1 = 1
        self.info2 = 'time'
        print 'initialised'

class MainFrame[]:
    def __init__[self]:
        a=info[]
        print a.info1
        b=page1[a]
        c=page2[a]
        print a.info1

class page1[]:
    def __init__[self, information]:
        self.info=information
        self.info.info1=3

class page2[]:
    def __init__[self, information]:
        self.info=information
        print self.info.info1

t=MainFrame[]

Đầu ra là:

initialised
1
3
3

Thông tin chỉ được khởi tạo sau khi chứng minh chỉ có một trường hợp nhưng Trang1 đã thay đổi Biến thông tin1 thành 3 và Trang2 đã đăng ký thay đổi đó.

Đã trả lời ngày 30 tháng 5 năm 2012 lúc 14:38May 30, 2012 at 14:38

RowanrowanRowan

2212 Huy hiệu bạc2 Huy hiệu đồng2 silver badges2 bronze badges

Không ai đã cung cấp một ví dụ mã cho thấy một cách để làm điều này mà không thay đổi các đối số init. Bạn chỉ có thể sử dụng một biến trong phạm vi bên ngoài xác định hai lớp. Tuy nhiên, điều này sẽ không hoạt động nếu một lớp được xác định trong một tệp nguồn riêng biệt với nhóm kia.

var1 = None
class foo[]:
  def __init__[self]
    self.var1 = var1 = 1

class bar[]:
  def __init__[self]:
    print var1

f = foo[]
b = bar[]

Đã trả lời ngày 27 tháng 2 năm 2012 lúc 22:37Feb 27, 2012 at 22:37

AcidtonicacidtonicAcidTonic

1011 Huy hiệu bạc2 Huy hiệu đồng1 silver badge2 bronze badges

1

Giống như trong bất kỳ ngôn ngữ nào.

class Foo[object]:
    def __init__[self]:
        self.x = 42

class Bar[object]:
    def __init__[self, foo]:
        print foo.x

a = Foo[]
b = Bar[a]

Đã trả lời ngày 21 tháng 9 năm 2011 lúc 14:41Sep 21, 2011 at 14:41

Cat Plus Plus Plus PlusCat Plus Plus

123K26 Huy hiệu vàng196 Huy hiệu bạc222 Huy hiệu đồng26 gold badges196 silver badges222 bronze badges

1

Ngoài ra, bạn có thể có một lớp cơ sở chung mà từ đó cả hai lớp có nguồn gốc kế thừa biến lớp var1. Bằng cách này, tất cả các trường hợp của các lớp dẫn xuất có thể có quyền truy cập vào biến.

Đã trả lời ngày 21 tháng 9 năm 2011 lúc 14:46Sep 21, 2011 at 14:46

Cái gì đó như:

class foo[]:
  def __init__[self]
    self.var1 = 1

class bar[]:
  def __init__[self, foo]:
    print foo.var1

f = foo[]
b = bar[foo]

Bạn sẽ có thể vượt qua các đối tượng trong Python giống như bạn đi qua các con trỏ trong C ++.

Đã trả lời ngày 21 tháng 9 năm 2011 lúc 14:42Sep 21, 2011 at 14:42

Winston Ewertwinston EwertWinston Ewert

43.2K10 Huy hiệu vàng67 Huy hiệu bạc82 Huy hiệu Đồng10 gold badges67 silver badges82 bronze badges

4

Có lẽ điều này đã được thêm vào ngôn ngữ vì câu hỏi này đã được hỏi ...

Từ khóa toàn cầu sẽ giúp.

x = 5

class Foo[]:
    def foo_func[self]:
        global x    # try commenting this out.  that would mean foo_func[]
                    # is creating its own x variable and assigning it a
                    # value of 3 instead of changing the value of global x
        x = 3

class Bar[]:
    def bar_func[self]:
        print[x]

def run[]:
    bar = Bar[]     # create instance of Bar and call its
    bar.bar_func[]  # function that will print the current value of x

    foo = Foo[]     # init Foo class and call its function
    foo.foo_func[]  # which will add 3 to the global x variable

    bar.bar_func[]  # call Bar's function again confirming the global
                    # x variable was changed 


if __name__ == '__main__':
    run[]

Đã trả lời ngày 10 tháng 8 năm 2018 lúc 14:48Aug 10, 2018 at 14:48

Bài Viết Liên Quan

Chủ Đề