002、面向对象(二)、属性 和 方法

 

一、面向对象(二)、属性 和 方法:

  1、类属性和实列属性重名了,对象访问属性时,是访问类还是实列自己的? 实列自己的;
  2、在类中,实列方法可以调用其他实列方法吗? 可以;
  3、在类中的实列方法中可以给对象设置属性吗 ?
    可以,但是不建议这样做,同时pycharm报警告;
    动态添加属性,只有在调用方法后才会生效 ;
  4、类中方法的参数,可以是其他类的实列对象吗? 可以是
  5、给当前对象添加属性,该属性只属于该对象,其他对象调用会报错 ;

 

  示例代码如下:

002、面向对象(二)、属性 和 方法
# 1a、类属性和实列属性重名了,对象访问属性时,是访问类还是实列自己的?  实列自己的;
class Cat():

    color = '黄色'

    def __init__(self, name, color):
        self.name = name
        self.color = color

    def get_color(self):
        print(self.color)

    def show_color(self):
        self.get_color()


c = Cat('加菲', '灰色')
c.get_color()


# 1b、有类属性,但无实例属性,访问时,访问的是类属性 ;
class Cat():

    color = '黄色'

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

    def get_color(self):
        print(self.color)

c = Cat('加菲')
c.get_color()


# 2、在类中,实列方法可以调用其他实列方法吗? 可以;
class Dog():

    def __init__(self, name, color):
        self.name = name
        self.color = color

    def get_color(self):
        print(self.color)

    def show_color(self):
        self.get_color()


d = Dog('加菲', '黑色')
d.show_color()


# 3、在类中的实列方法中可以给对象设置属性吗 ?
# 可以,但是不建议这样做,同时pycharm报警告;
# 动态添加属性,只有在调用方法后才会生效 ;
class Monkey():

    def __init__(self, name, color):
        self.name = name
        self.color = color

    def set_weight(self, weight):
        self.weight = weight

    def show_weight(self):
        print(self.weight)


m = Monkey('加菲', '黑色')
m.set_weight(3)
m.show_weight()


# 4、类中方法的参数,可以是其他类的实列对象吗? 可以是
class Duck():

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


class Person():

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

    def eat(self, duck):
        print('{0}吃{1}'.format(self.name, duck.name))


d = Duck('烧鸭')
p = Person('八戒')
p.eat(d)


# 5、给当前对象添加属性,该属性只属于该对象,其他对象调用会报错 ;
class Chicken():

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


chicken_a = Chicken('鸡名字A')
chicken_a.gender = '母鸡'
print(chicken_a.name, chicken_a.gender)

chicken_b = Chicken('鸡名字B')
print(chicken_b.name, chicken_b.gender)
# gender 属性只属于 chicken_a 对象,chicken_b调用的话会报错
# AttributeError: 'Chicken' object has no attribute 'gender'
View Code

  执行结果如下:

002、面向对象(二)、属性 和 方法
Traceback (most recent call last):
  File "D:/SkyWorkSpace/WorkSpace/Pytest/Temp/day10/test_01/test_02.py", line 232, in <module>
    print(chicken_b.name, chicken_b.gender)
AttributeError: 'Chicken' object has no attribute 'gender'
灰色
黄色
黑色
3
八戒吃烧鸭
鸡名字A 母鸡

Process finished with exit code 1
View Code

 

上一篇:复习C语言002


下一篇:Go语言学习笔记002-基础数据类型