Python --- 请教版主,如何显示某个attribute从属于哪个object?

[复制链接]
跳转到指定楼层
16995 musiker 发表于 2014-7-17 17:58:17 楼主
本帖最后由 musiker 于 2014-7-17 17:59 编辑

class Character(object):
    def __init__(self):
        self.age = 100

    def printAge(self):
        print self.age

class Human(Character):
    def __init__(self, name, petname):
        super(Human,self).__init__()
        self.name = name
        self.pet = Pet(petname)
    def __str__(self):
        return 'my name is '+self.name

class Pet:
    def __init__(self,name):
        self.name = name

    def __str__(self):
        return 'i am a pet, and my name is '+self.name


jack = Human('jack','jenny')
jack.printAge()
print jack
print jack.pet
print dir(jack.pet)

在这个例子里面,jenny是Pet的instance,同时也是jack的attribute,所以只存在于jack里面,请问有没有办法或者函数显示jenny和jack的从属关系?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
关于大陆地区Rhino原厂培训中心
Jorin 发表于 2014-7-17 20:33:56
2
给pet也加一个主人的属性,指向jack就好了,没有内建函数能够直接读到谁的属性包含这个对象。因为只是在jack对象内部,有一个属性指向了内存中pet的位置。
 楼主| musiker 发表于 2014-7-17 21:08:47
3
谢谢版主,这个办法我刚刚也想到了,能够解决问题。

class Character(object):
        def __init__(self):
                self.age = 100

        def printAge(self):
                print self.age

class Human(Character):
        def __init__(self, human_name, pet_name):
                super(Human,self).__init__()
                self.name = human_name
                self.pet = Pet(pet_name, human_name)
        def __str__(self):
                return 'my name is '+self.name

class Pet(object):
        def __init__(self,pet_name,human_name):
                self.age = 1
                self.name = pet_name
                self.owner = human_name

        def __str__(self):
                return 'i am a pet, i belongs to ' + self.owner + ', and my name is ' + self.name


jack = Human('jack','jenny')

jack.printAge()
print jack
print dir(jack)
print '\n'
print jack.pet
print jack.pet.name
print jack.pet.age
print '\n'
print type(jack.pet)
print jenny


而且我发现其实这个Pet的instance在__main__里面,其实不叫‘jenny’,而是jack.pet,所以说我的这个问题其实伪命题,吼吼!
 楼主| musiker 发表于 2014-7-17 21:39:23
4
尝试了一下更负责一点的例子,完全okay,

class Character(object):
        def __init__(self):
                self.age = 10

        def printAge(self):
                print self.age

class Human(Character):
        def __init__(self, human_name, pet_name, pet_type='dog'):
                super(Human,self).__init__()
                self.name = human_name

                if pet_type == 'dog':
                        self.pet = Dog(pet_name, human_name)
                elif pet_type == 'cat':
                        self.pet = Cat(pet_name, human_name)
                else:
                        self.pet = Pet(pet_name, human_name)

        def __str__(self):
                return 'my name is '+self.name

class Pet(object):
        def __init__(self,pet_name,human_name):
                self.age = 1
                self.name = pet_name
                self.owner = human_name

        def __str__(self):
                return 'i am a pet, i belongs to ' + self.owner + ', and my name is ' + self.name

class Dog(Pet):
        def __init__(self,pet_name,human_name):
                super(Dog,self).__init__(pet_name,human_name)

        def __str__(self):
                return 'i am a dog, i belongs to ' + self.owner + ', and my name is ' + self.name

class Cat(Pet):
        def __init__(self,pet_name,human_name):
                super(Cat,self).__init__(pet_name,human_name)

        def __str__(self):
                return 'i am a cat, i belongs to ' + self.owner + ', and my name is ' + self.name



jack = Human('jack','jenny','dog')
mary = Human('mary','nick','cat')
chris = Human('chris','lua','girlfriend')

print jack
print mary
print chris
print '\n'
print jack.pet
print mary.pet
print chris.pet

感叹一下,python的OOP功能真是厉害!

评分

参与人数 1技术 +1 坛币 +5 收起 理由
Jorin + 1 + 5 很给力!

查看全部评分

Jorin 发表于 2014-7-17 21:47:05
5
musiker 发表于 2014-7-17 21:39
尝试了一下更负责一点的例子,完全okay,

class Character(object):

研究的很细致。加分!
 楼主| musiker 发表于 2014-7-17 21:57:07
6
Jorin 发表于 2014-7-17 21:47
研究的很细致。加分!

多谢版主支持!!!
您需要登录后才可以回帖 登录 | 注册成为会员

本版积分规则