Hướng dẫn can an attribute be an object python? - một thuộc tính có thể là một đối tượng python không?

5

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Trong Python, một đối tượng có thể có một đối tượng khác như một thuộc tính không? Ví dụ, một lớp có tên CAR có thể có một lớp gọi là Tyre là một thuộc tính không?

Hướng dẫn can an attribute be an object python? - một thuộc tính có thể là một đối tượng python không?

Decio lira

1.8211 huy hiệu vàng18 Huy hiệu bạc24 Huy hiệu đồng1 gold badge18 silver badges24 bronze badges

Khi được hỏi ngày 24 tháng 5 năm 2010 lúc 22:40May 24, 2010 at 22:40

1

Bạn có nghĩa là lớp tire hoặc một thể hiện của lớp tire? Nó có thể có cả hai mặc dù cái sau có lẽ hữu ích hơn. Nếu bạn đang tìm kiếm một đối tượng của lớp

>>> class tire:
...     pass
...
>>> class car:
...     def __init__(self, tire):
...             self.tire = tire
...
>>> t = tire()
>>> t.brand = 'Goodyear'
>>> c = car(t)
>>> c.tire.brand
'Goodyear'
1 để có-một đối tượng của loại
>>> class tire:
...     pass
...
>>> class car:
...     def __init__(self, tire):
...             self.tire = tire
...
>>> t = tire()
>>> t.brand = 'Goodyear'
>>> c = car(t)
>>> c.tire.brand
'Goodyear'
2, bạn sẽ muốn loại bài tập
>>> class tire:
...     pass
...
>>> class car:
...     def __init__(self, tire):
...             self.tire = tire
...
>>> t = tire()
>>> t.brand = 'Goodyear'
>>> c = car(t)
>>> c.tire.brand
'Goodyear'
3:object of class
>>> class tire:
...     pass
...
>>> class car:
...     def __init__(self, tire):
...             self.tire = tire
...
>>> t = tire()
>>> t.brand = 'Goodyear'
>>> c = car(t)
>>> c.tire.brand
'Goodyear'
1 to has-a object of type
>>> class tire:
...     pass
...
>>> class car:
...     def __init__(self, tire):
...             self.tire = tire
...
>>> t = tire()
>>> t.brand = 'Goodyear'
>>> c = car(t)
>>> c.tire.brand
'Goodyear'
2 you'd want the
>>> class tire:
...     pass
...
>>> class car:
...     def __init__(self, tire):
...             self.tire = tire
...
>>> t = tire()
>>> t.brand = 'Goodyear'
>>> c = car(t)
>>> c.tire.brand
'Goodyear'
3 variety of assignment:

Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
>>> class Fred(object): pass
... 
>>> class Mary(object):
...     def __init__(self):
...         self.classref = Fred
...         self.classinst = Fred()
... 
>>> x = Mary()
>>> dir(x)
[... 'classinst', 'classref']
>>> x.classref
<class '__main__.Fred'>
>>> x.classinst
<__main__.Fred object at 0xb76eed0c>

Đã trả lời ngày 24 tháng 5 năm 2010 lúc 22:50May 24, 2010 at 22:50

Hướng dẫn can an attribute be an object python? - một thuộc tính có thể là một đối tượng python không?

MSWMSWmsw

42K9 Huy hiệu vàng84 Huy hiệu bạc 109 Huy hiệu đồng9 gold badges84 silver badges109 bronze badges

Yes.

>>> class tire:
...     pass
...
>>> class car:
...     def __init__(self, tire):
...             self.tire = tire
...
>>> t = tire()
>>> t.brand = 'Goodyear'
>>> c = car(t)
>>> c.tire.brand
'Goodyear'

Đã trả lời ngày 24 tháng 5 năm 2010 lúc 23:18May 24, 2010 at 23:18

Gonsalugonsalugonsalu

3.1252 Huy hiệu vàng17 Huy hiệu bạc18 Huy hiệu đồng2 gold badges17 silver badges18 bronze badges

Bạn có thể có cả phiên bản và lớp là thuộc tính của cả hai lớp và phiên bản - tất cả bốn kết hợp đều hoạt động tốt (và có thể được kết hợp tự do). Tuy nhiên, hãy ghi nhớ sự khác biệt giữa một lớp và một thể hiện của nó - cách bạn diễn đạt câu hỏi của bạn cho thấy một số nhầm lẫn. Dù sao, hãy đặt câu hỏi của bạn theo nghĩa đen:

Một lớp có thể gọi là xe có một lớp gọi là Tyre là một thuộc tính?

class tire(object):
    ...class body here...

class car(object):
    thetire = tire
    ...rest of class body here...

Bài tập

>>> class tire:
...     pass
...
>>> class car:
...     def __init__(self, tire):
...             self.tire = tire
...
>>> t = tire()
>>> t.brand = 'Goodyear'
>>> c = car(t)
>>> c.tire.brand
'Goodyear'
4 trong phần thân của
>>> class tire:
...     pass
...
>>> class car:
...     def __init__(self, tire):
...             self.tire = tire
...
>>> t = tire()
>>> t.brand = 'Goodyear'
>>> c = car(t)
>>> c.tire.brand
'Goodyear'
5 sẽ không hoạt động (đặt tên nhầm lẫn!-) Vì vậy, bạn cần đặt tên cho thuộc tính lớp khác với lớp có giá trị của nó. . Đó có phải là nguồn gốc của vấn đề khiến bạn hỏi câu hỏi này không?

Đã trả lời ngày 25 tháng 5 năm 2010 lúc 0:04May 25, 2010 at 0:04

Alex Martellialex MartelliAlex Martelli

826K163 Huy hiệu vàng1203 Huy hiệu bạc1382 Huy hiệu Đồng163 gold badges1203 silver badges1382 bronze badges

Chắc chắn rồi; Các lớp, giống như bất kỳ giá trị nào khác, có thể là thuộc tính lớp hoặc phiên bản:

class A(object):
    pass

class B(object):
    class_attr = A

    def __init__(self):
        self.instance_attr = A

Với mã này, bạn có thể sử dụng

>>> class tire:
...     pass
...
>>> class car:
...     def __init__(self, tire):
...             self.tire = tire
...
>>> t = tire()
>>> t.brand = 'Goodyear'
>>> c = car(t)
>>> c.tire.brand
'Goodyear'
7 hoặc
>>> class tire:
...     pass
...
>>> class car:
...     def __init__(self, tire):
...             self.tire = tire
...
>>> t = tire()
>>> t.brand = 'Goodyear'
>>> c = car(t)
>>> c.tire.brand
'Goodyear'
8 để truy cập
>>> class tire:
...     pass
...
>>> class car:
...     def __init__(self, tire):
...             self.tire = tire
...
>>> t = tire()
>>> t.brand = 'Goodyear'
>>> c = car(t)
>>> c.tire.brand
'Goodyear'
9.

Đã trả lời ngày 24 tháng 5 năm 2010 lúc 23:12May 24, 2010 at 23:12

John Millikinjohn MillikinJohn Millikin

Phim thương hiệu vàng 193K3939 gold badges211 silver badges222 bronze badges

Thuộc tính lớp và đối tượng là gì? Có gì khác biệt? Tại sao?

Trước khi so sánh và ví dụ về các thuộc tính lớp và đối tượng, trước tiên hãy xác định chúng -

  • Một thuộc tính lớp là một biến thuộc về một lớp nhất định chứ không phải là một đối tượng cụ thể. Mỗi phiên bản của lớp này chia sẻ cùng một biến. Các thuộc tính này thường được xác định bên ngoài hàm tạo
    class tire(object):
        ...class body here...
    
    class car(object):
        thetire = tire
        ...rest of class body here...
    
    0.class attribute is a variable that belongs to a certain class, and not a particular object. Every instance of this class shares the same variable. These attributes are usually defined outside the
    class tire(object):
        ...class body here...
    
    class car(object):
        thetire = tire
        ...rest of class body here...
    
    0 constructor.
  • Thuộc tính thể hiện/đối tượng là một biến thuộc về một đối tượng (và chỉ một) đối tượng. Mỗi phiên bản của một lớp trỏ đến các biến thuộc tính của chính nó. Các thuộc tính này được xác định trong hàm tạo
    class tire(object):
        ...class body here...
    
    class car(object):
        thetire = tire
        ...rest of class body here...
    
    0.instance/object attribute is a variable that belongs to one (and only one) object. Every instance of a class points to its own attributes variables. These attributes are defined within the
    class tire(object):
        ...class body here...
    
    class car(object):
        thetire = tire
        ...rest of class body here...
    
    0 constructor.

Tại sao mặc dù?

Tại sao người ta cần sử dụng các thuộc tính lớp và thuộc tính đối tượng?

Trong một thế giới song song chỉ có những con chó, mỗi con chó có một cái tên và một độ tuổi. Tổng số con chó phải được cập nhật mọi lúc. Tất cả điều này phải được xác định trong một lớp! Điều này có thể trông giống như thế này:

class Dog:
dogs_count = 0
def __init__(self, name, age):
self.name = name
self.age = age
print("Welcome to this world {}!".format(self.name))
Dog.dogs_count += 1
def __del__(self):
print("Goodbye {} :(".format(self.name))
Dog.dogs_count -= 1

Trong lớp này, chúng tôi có một thuộc tính lớp

class tire(object):
    ...class body here...

class car(object):
    thetire = tire
    ...rest of class body here...
2. Biến này theo dõi số lượng chó chúng ta có trong thế giới chó của chúng ta. Chúng tôi có hai thuộc tính thể hiện,
class tire(object):
    ...class body here...

class car(object):
    thetire = tire
    ...rest of class body here...
3 và
class tire(object):
    ...class body here...

class car(object):
    thetire = tire
    ...rest of class body here...
4. Các biến này là duy nhất cho mỗi con chó (thuộc tính của mọi trường hợp có các vị trí bộ nhớ khác nhau). Mỗi khi chức năng
class tire(object):
    ...class body here...

class car(object):
    thetire = tire
    ...rest of class body here...
0 được thực thi,
class tire(object):
    ...class body here...

class car(object):
    thetire = tire
    ...rest of class body here...
2 tăng lên. Tương tự như vậy - mỗi khi một con chó chết (không may là những con chó không sống mãi mãi trong thế giới này), gọi phương pháp ____27,
class tire(object):
    ...class body here...

class car(object):
    thetire = tire
    ...rest of class body here...
2 giảm.

a = Dog("Max", 1)
print("Number of dogs: {}".format(Dog.dogs_count))
b = Dog("Charlie", 7)
del a
c = Dog("Spot", 4.5)
print("Number of dogs: {}".format(Dog.dogs_count))
del b
del c
print("Number of dogs: {}".format(Dog.dogs_count))
Output:
Welcome to this world Max!
Number of dogs: 1
Welcome to this world Charlie!
Goodbye Max :(
Welcome to this world Spot!
Number of dogs: 2
Goodbye Charlie :(
Goodbye Spot :(
Number of dogs: 0

Ah ha! Chúng tôi đã quản lý để gán các biến duy nhất cho một đối tượng trong khi có một biến được chia sẻ mà tất cả các đối tượng chứa.

Kế thừa của các thuộc tính

Trước khi mở chủ đề này, hãy để Lừa xem thuộc tính

class tire(object):
    ...class body here...

class car(object):
    thetire = tire
    ...rest of class body here...
9 tích hợp.

class Example:
classAttr = 0
def __init__(self, instanceAttr):
self.instanceAttr = instanceAttr
a = Example(1)
print(a.__dict__)
print(Example.__dict__)
Output:
{'instanceAttr': 1}
{'__module__': '__main__', '__doc__': None, '__dict__': <attribute '__dict__' of 'Example' objects>, '__init__': <function Example.__init__ at 0x7f8af2113f28>, 'classAttr': 0, '__weakref__': <attribute '__weakref__' of 'Example' objects>}

Như chúng ta có thể thấy, cả lớp và đối tượng đều có từ điển với các khóa và giá trị thuộc tính. Từ điển lớp lưu trữ nhiều thuộc tính tích hợp mà một thể hiện không chứa.

b = Example(2)
print(b.classAttr)
print(Example.classAttr)
b.classAttr = 653
print(b.classAttr)
print(Example.classAttr)
Output:
0
0
653
0

Woah. Mang lại những gì tôi đã viết trước đó, mỗi trường hợp của một lớp chia sẻ cùng một thuộc tính lớp. Chuyện gì đã xảy ra ở đây? Chúng tôi đã thay đổi thuộc tính lớp của một trường hợp nhất định, nhưng biến được chia sẻ thực sự thay đổi. Nhìn vào từ điển của các yếu tố này sẽ cung cấp thêm cái nhìn sâu sắc:Bringing back what I wrote earlier, each instance of a class shares the same class attributes. What happened here? We changed the class attribute of a certain instance, but the shared variable didn’t actually change. Taking a look at the dictionaries of these elements will give further insight:

b = Example(2)
print(b.__dict__)
print(Example.__dict__)
b.classAttr = 653
print(b.__dict__)
print(Example.__dict__)
Output:
{'instanceAttr': 2}
'__module__': '__main__', '__doc__': None, '__dict__': <attribute '__dict__' of 'Example' objects>, '__init__': <function Example.__init__ at 0x7f8af2113f28>, 'classAttr': 0, '__weakref__': <attribute '__weakref__' of 'Example' objects>}
{'instanceAttr': 2, 'classAttr': 653}
{'__module__': '__main__', '__doc__': None, '__dict__': <attribute '__dict__' of 'Example' objects>, '__init__': <function Example.__init__ at 0x7f8af2113f28>, 'classAttr': 0, '__weakref__': <attribute '__weakref__' of 'Example' objects>}

Nhìn kỹ, chúng tôi nhận thấy rằng

class A(object):
    pass

class B(object):
    class_attr = A

    def __init__(self):
        self.instance_attr = A
0 đã được thêm vào từ điển của đối tượng, với giá trị sửa đổi của nó. Từ điển lớp học vẫn giữ nguyên, điều này cho thấy các thuộc tính lớp có thể hoạt động như các thuộc tính thể hiện đôi khi.

Sự kết luận

Tóm lại, các thuộc tính lớp và đối tượng cực kỳ hữu ích nhưng có thể trở nên lộn xộn khi được sử dụng cùng nhau. Các thuộc tính lớp thuận lợi khi mỗi đối tượng cần chia sẻ một biến, chẳng hạn như bộ đếm. Các thuộc tính đối tượng có lợi thế khi mỗi đối tượng duy nhất cần các giá trị riêng của nó, một cái gì đó làm cho chúng khác với các đối tượng khác.

Một thuộc tính có thể là một đối tượng?

Một đối tượng thuộc tính thường được chứa trong các đối tượng nhập. Một thuộc tính là một đối tượng được đặt tên với các giá trị liên quan. Mỗi giá trị trong thuộc tính tương ứng với một đối tượng Java thuộc một số loại.. An attribute is a named object with associated values. Each value in the attribute corresponds to a Java object of some type.

Thuộc tính lớp có thể là một đối tượng?

Một thuộc tính lớp là một biến thuộc về một lớp nhất định chứ không phải là một đối tượng cụ thể.not a particular object.

Đối tượng có thuộc tính python không?

Vì mọi thứ trong Python là một đối tượng và các đối tượng có các thuộc tính (trường và phương thức), nên việc viết các chương trình có thể kiểm tra loại thuộc tính nào mà một đối tượng có.Ví dụ, một chương trình Python có thể mở một ổ cắm trên máy chủ và nó chấp nhận các tập lệnh Python được gửi qua mạng từ máy khách.objects have attributes (fields and methods), it's natural to write programs that can inspect what kind of attributes an object has. For example, a Python program could open a socket on the server and it accepts Python scripts sent over the network from a client machine.

Là thuộc tính và đối tượng giống nhau?

Một đặc tính đối tượng luôn có mặt và chiếm lưu trữ, ngay cả khi thuộc tính không có giá trị.Về mặt này, một thuộc tính tương tự như một trường trong cấu trúc dữ liệu có độ dài cố định.Một tính năng phân biệt của các thuộc tính là mỗi thuộc tính có các phương thức riêng để thiết lập và nhận giá trị của nó.. In this respect, an attribute is similar to a field in a fixed-length data structure. A distinguishing feature of attributes is that each attribute has its own methods for setting and getting its value.