Python学习17:自我复习:类和对象_方法_初始化和self

类和对象

类属性和实例属性:

  • 类属性:所有的成员都是一样的,可后天学习
  • 实例属性:不是每个人员都一样

类属性和实例属性的区别:

  • 类属性:类只能获取类属性
  • 实例属性:可以获取 实例属性和类属性
实例1class Student(object):
    school  = "usc"    #类属性

    def __init__(self):
        self.name = "csdn"		#实例属性
        self.age = 24			#实例属性

new_stu = Student()
print(new_stu.school)     #打印结果:usc
print(new_stu.name)       #打印结果:报错,AttributeError: 'Student' object has no attribute 'name'
print(new_stu.age)        #打印结果:报错,不能在类外通过类对象访问私有的类属性


-----------------------------------------------------------------------------------------------------

实例2class Student(object):
    school  = "usc"

    def __init__(self):
        self.name = "csdn"
        self.age = 24

new_stu = Student()
new_stu.age = 26

print(new_stu.school)     #打印结果:usc
print(new_stu.name)       #打印结果:csdn
print(new_stu.age)        #打印结果:26

实例3class Man:
	gender = "man"
	age = 24
	power = "strong"

one_man = Man()
two_man = Man()

print(one_man.gender)        #打印结果:man
print(two_man.gender)        #打印结果:man

one_man.face = "yello"
print(one_man.face)        #打印结果:yello
print(two_man.face)        #打印结果:报错,AttributeError, 属性错误,获取不到定义给one_man的face

print(Man.face)      	   #打印结果:报错,AttributeError, 属性错误,获取不到定义给one_man的face


方法

方法

  • 表示类、对象的行为
  • 方法本质上是函数

各个方法

  • 实例方法:实例具备的,类不一定具备。 类不能调用实例方法
  • 类方法: 类具备的, 实例可以获取
  • 静态方法:放在类里面的函数

实例方法,对象方法

  • 第一个参数名称,规定是 self
  • 实例方法在调用的时候,前缀是对象,不能是类

类方法

  • 在方法的上面添加 @classmethod
  • 把实例方法当中的 self 改成 cls

静态方法

  • 静态方法表示: 方法的上面加上一个 @staticmethod
  • 不需要用 self, cls 作为固定参数
实例:
class Man:
    gender = "man"
    age = 24
    power = 'strong'

    @staticmethod    #静态方法
    def wearther():
        print("weather is good")

    @classmethod     #类方法
    def eat(cls):
        print("pizza")
        return ("is good")

    def drink(self):
        self.drink = "juice"

#静态调用方法
Man.wearther()                #打印结果:weather is good
Man().wearther()              #打印结果:weather is good

#类调用方法	
print(Man.eat())                #打印结果:pizza   is  good
print(Man().eat())	            #打印结果:pizza   is  good

初始化和self

初始化

  • 要通过定义的类得到一个具体的对象。 生出来,造出来。

实例属性的定义

  • 类外面:对象名.属性
  • 类里面:self.属性

init 定义的形式参数 和 对象的实例化的实际参数,是一一对应的

  • 必须return None
  • 传入的参数必须要设置成实例属性,才能被被对象访问到

self:在 类里面 ,表示一个 对象
cls:在 类里面 ,表示一个

实例:
class Man:
    # 定义类属性
    gender = '男'
    power = "强"
    handsome = 'very very'

    def __init__(self,  name, face_shape='圆脸'):
        """对象的初始化过程。 让对象之间长得不太一样。"""
        # 定义, 在类里面,定义实例属性使用 self.属性 = ...
        self.face = face_shape
        self.name = name


    @staticmethod
    def tianqiyubao():
        print("天气预报:今天是晴天。")

    @classmethod
    def eat(cls):
        print("正在吃饭")
        print(cls.power)
        return "hello world"

    def drink(self, brand):
        """喝。。。"""
        print("{} 正在喝 {} 酒".format(self.name, brand))
        # self.play_game()
        self.eat()
        # 定义实例属性
        self.single = False

    def play_game(self):
        """玩游戏"""
        print("玩游戏")



yuz = Man('yuz', '方脸')

# print(yuz.face)
# print(yuz.name)
# yuz.drink('茅台')

# 整容的权利,可以后天改变属性
# yuz.face = "帅脸"
# print(yuz.face)


# 初始化以后 。 single 属性是后天定义的,
yuz.drink('五粮液')
print(yuz.single)
yuz.single = True
print(yuz.single)

你可能感兴趣的:(Python学习日记,python,类,class,面向对象编程)