python 类和对象

面向对象编程将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式更加接近人的思维,从而大大提高了编程的效率。

python完全采用了面向对象的思想,是真正的面向对象语言,完全支持面向对象的基本功能,例如:继承,多态,封装等。

Python中一切皆对象,我们所学的数据类型,函数等,都是对象。

>>> class Student:

company='百度'    #类属性

count=0           #类属性

def __init__(self,name,score):

self.name=name       #实例属性

self.score=score     #实例属性

Student.count += 1

def say_score(self):          #实例方法

print('我的公司是:',Student.company)

print(self.name,'的分数是:',self.score)

class Student:
    company="baidu"
    count=0
    def __init__(self,name,score):
        self.name=name
        self.score=score
        Student.count += 1
    def say(self):
        print('公司名字:',Student.company)
        print(self.name,'分数是:',self.score)

#Student.say(self) #报错
a=Student('bob',200)
a.say()


结果

公司名字: baidu
bob 分数是: 200

 
class User:
    def walk(self):
        print(self,'正在慢慢的走')
    def stand(self):
        print(self,'正在站着')
        User.walk(self)  #这里调用walk函数的方法得类.方法(参数)
User.walk('dog')
#User.walk() #报错,因为没有self参数传入,但是self如果有默认参数值则不会出错 u
=User() u.walk() u.stand() #u.walk('cat') #报错,因为u=User()已经传递了参数,cat和之前的参数冲突 User.stand('cat')
dog 正在慢慢的走
<__main__.User object at 0x000002A7F0D352E8> 正在慢慢的走
<__main__.User object at 0x000002A7F0D352E8> 正在站着
<__main__.User object at 0x000002A7F0D352E8> 正在慢慢的走
cat 正在站着
cat 正在慢慢的走

python的类可以调用实例方法,但使用实例方法时,python不会自动为方法的第一个参数self绑定参数值。程序必须显式地为第一个参数self传入调用者,这种调用方式成为“未绑定方法”

类方法与静态方法

python的类方法和静态方法很相似,他们都推荐使用类方法来调用,类方法和静态方法的区别在于:python会自动绑定类方法的第一个参数,类方法的第一个参数(通常建议参数名为cls)会自动绑定到类本身,但对于静态方法则不会自动绑定

使用@classmethod修饰的方法就是类方法

使用@staticmethod修饰的方法就是静态方法

class User:
    @classmethod
    def walk(cls):
        print(cls,'正在慢慢的走')
    @staticmethod
    def stand(p):
        print(p,'正在站着')
        User.walk(p)
#User.walk()
#u=User()
#u.walk()
#u.stand()
#u.walk('cat')  #报错,因为u=User()已经传递了参数,cat和之前的参数冲突
#User.stand('cat')
User.walk()
#User.stand('bob') #报错,两个参数值,因为stand调用了walk类方法。会自动传入第一个参数
#User.stand() #报错,p没有参数值传入。
View Code

上述代码中stand调用了walk方法。传入参数容易出错。

 
class User:
    @classmethod
    def walk(cls):
        print(cls,'正在慢慢的走')
    @staticmethod
    def stand(p):
        print(p,'正在站着')
User.walk()
#User.stand() #报错,无参数传入
User.stand('honey')
u=User()
u.walk()
#u.stand() #报错无参数p传入
u.stand('dog')

结果

<class '__main__.User'> 正在慢慢的走
honey 正在站着
<class '__main__.User'> 正在慢慢的走
dog 正在站着
原文地址:https://www.cnblogs.com/inuyashalove/p/12777563.html