Rumah  >  Soal Jawab  >  teks badan

Bolehkah subkelas Python mengatasi fungsi global?

Sebagai contoh, terdapat kelas A dalam a.py

A mempunyai beberapa kaedah, semuanya memanggil fungsi global hello() (ditakrifkan di luar kelas, tetapi juga dalam a.py).

Andaikan saya ingin menulis subkelas B, tetapi saya mahu B memanggil hello() yang baru ditakrifkan Adakah ini boleh?

# a.py
# hello() 不在类的声明里
def hello():
    print "Hello"
    
class A(object):
    # 调用全局函数 hello()
    def greeting(self):
        hello()
# b.py
class B(A):
    # 想要重载hello()从而使greeting 的输出改变

Jangan tukar salam, tetapi mahukan output seperti ini:

b = B()
b.salam()
'Hai'

曾经蜡笔没有小新曾经蜡笔没有小新2712 hari yang lalu470

membalas semua(2)saya akan balas

  • 大家讲道理

    大家讲道理2017-05-18 10:48:14

    Nampaknya anda perlu menggunakan harta pusaka.

    balas
    0
  • 漂亮男人

    漂亮男人2017-05-18 10:48:14

    Terima kasih atas jemputan.

    Maaf, saya belum memahami sepenuhnya keperluan anda, jadi saya akan menjawab secara teori dahulu Jika penyoal boleh menambah sesuatu, saya boleh menambah baik lagi jawapan saya dan memberikan kod yang boleh menyelesaikan masalah.

    Dalam Python, jika kaedah boleh digabungkan secara logik dengan kelas. Kemudian anda boleh menggunakan kaedah ini sebagai kaedah statik kelas, iaitu, menghiasinya dengan @staticmethod. @staticmethod装饰一下。

    如果将hello()作为类A和类B的静态方法,那么在各自的类中用cls.hello()就可以调用各自版本的hello了。

    根据题主的描述,在类B中含有hello(),那么我想将其作为静态方法是没有问题的。如果有其他模块想要调用a.py中的hello(),可以直接使用A.hello()

    Jika anda menggunakan hello() sebagai kaedah statik kelas A dan kelas B, kemudian gunakan cls.hello() dalam kelas masing-masing untuk memanggil versi masing-masing < kod >hello.

    Menurut penerangan subjek, kelas B mengandungi hello(), jadi saya rasa tiada masalah untuk menggunakannya sebagai kaedah statik. Jika terdapat modul lain yang ingin memanggil hello() dalam a.py, mereka boleh menggunakan A.hello() secara langsung. 🎜 🎜Sila betulkan saya jika saya salah faham kehendak soalan. 🎜

    balas
    0
  • Batalbalas